2010-10-07 3 views
0

У меня очень тяжелое время с моим приложением C#. Каждый раз, когда я запускаю код ниже, он дает мне ошибку об преобразовании типа данных nvarchar в int. Я попробовал кастинг, но он, похоже, не работает.C# Ошибка: ошибка преобразования типа nvarchar в int. ПОМОГИТЕ!

ConnectionString myConnString = new ConnectionString(); 
string connString = myConnString.getConnectionString(); 
SqlConnection connValidate = new SqlConnection(connString); 

SqlCommand cmdValidate = new SqlCommand("XXX", connValidate); 
cmdValidate.CommandType = CommandType.StoredProcedure; 

cmdValidate.Parameters.Add(new SqlParameter("@AccountID", currentUser)); 
cmdValidate.Parameters.Add(new SqlParameter("@PeriodMonth", Convert.ToString(comboBoxMonth.SelectedItem).Trim().ToUpper())); 
cmdValidate.Parameters.Add(new SqlParameter("@PeriodYear", Convert.ToInt32(comboBoxYear.SelectedValue))); 

connValidate.Open(); 

Int32 result = Convert.ToInt32(cmdValidate.ExecuteScalar()); 

connValidate.Dispose(); 
connValidate.Close(); 

ЗДЕСЬ хранимая процедура, которую я использую:

ALTER PROCEDURE [dbo].[XXX] 
    @AccountID char(6), 
    @PeriodMonth char(10), 
    @PeriodYear int, 
    @Date int, 
    @PeriodID int, 
    @InventoryID int, 
    @ProductOutID int 
AS 
    SELECT @PeriodID = PeriodID FROM Periods 
    WHERE PeriodMonth = @PeriodMonth AND PeriodYear = @PeriodYear AND AccountID = @AccountID 

    SELECT @InventoryID = InventoryID FROM Fact 
    WHERE PeriodID = @PeriodID AND AccountID = @AccountID 

    SELECT @ProductOutID = ProductOutID FROM Inventory 
    WHERE InventoryID = @InventoryID 

    SELECT DailyOutID FROM DailyOut 
    WHERE ProductOutID = @ProductOutID AND Date = @Date 
RETURN 

Что я хочу сделать здесь, чтобы проверить, является ли период того же месяца и года, введенный пользователем, уже существующие в базы данных. Таким образом, в основном хранимая процедура должна возвращать значение, если введенный период уже существует, если это так, то пользователю будет показано сообщение MessageBox, предупреждающее о существовании того же периода. Большое спасибо! :)

ответ

0
  1. Запуск SQL Profiler, так что вы можете захватить точное SQL отправляется на сервер.
  2. Скопируйте и вставьте этот sql в анализатор запросов или студию управления SQL.
  3. Запустите его, как правило, в режиме отладки и сообщите нам, какой номер строки имеет проблему.

Я предполагаю, что Periods.PeriodMonth не является символом (10), но мне нужно увидеть, в какой строке находится ошибка.

+0

спасибо за ответ. можете ли вы рассказать мне, как я могу получить доступ к SQL Profiler? Я не знаю, где я могу это найти. Спасибо: D – Acinsoft

+0

Какую версию SQL Server вы используете? –

0

Попробуйте это:

Int32 result = Int32.Parse(cmdValidate.ExecuteScalar()); 
0

Во-первых, убедитесь, что cmdValidate.ExecuteScalar() возвращает значение, которое вы думаете, это. Я думаю, проблема в хранимой процедуре. Если это так, вы можете опубликовать новый вопрос с разными тегами.

0

Try иметь выходной параметр как @DailyOutID

SELECT @DailyOutID = Cast(DailyOutID As Int) FROM DailyOut 
WHERE ProductOutID = @ProductOutID AND Date = @Date 

И читать параметр из вашей коллекции от cmdValidate.Parameters параметра Я

Смежные вопросы