Ошибка C #: Ошибка преобразования типа данных nvarchar в int. ПОМОГИТЕ! - PullRequest
0 голосов
/ 07 октября 2010

У меня действительно тяжелые времена с моим приложением 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, предупреждающее о существовании того же периода.Большое спасибо!:)

Ответы [ 4 ]

0 голосов
/ 07 октября 2010

Попробуйте использовать параметр out, например @ DailyOutID

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

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

0 голосов
/ 07 октября 2010

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

Int32 result = Int32.Parse(cmdValidate.ExecuteScalar());
0 голосов
/ 07 октября 2010

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

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

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

...