Параметр хранимой процедуры вставляет неправильное значение - PullRequest
1 голос
/ 20 февраля 2009

Добрый день всем,

У меня проблема с хранимой процедурой, вставляющей неверное значение. Ниже приводится краткое изложение моей хранимой процедуры ...

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE PROCEDURE [dbo].[InsertDifferential]
    @differential int = null
AS
    BEGIN TRY
        BEGIN TRANSACTION
            UPDATE
                DifferentialTable
            SET
                differential = @differential
        COMMIT
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
        ROLLBACK
        DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int, @ErrorState INT
        SELECT @ErrMsg = ERROR_MESSAGE(), 
               @ErrSeverity = ERROR_SEVERITY(),
               @ErrorState = ERROR_STATE();
        RAISERROR(@ErrMsg, @ErrSeverity, @ErrorState);
    END CATCH

Ниже приведен код, который я использую для вызова хранимой процедуры ...

SqlConnection dbEngine = new SqlConnection(connectionString);
SqlCommand dbCmd = new SqlCommand("InsertDifferential", dbEngine);
SqlDataAdapter dataAdapter = new SqlDataAdapter(dbCmd);

dbCmd.CommandType = CommandType.StoredProcedure;

if (myobject.differential.HasValue)
{ dbCmd.Parameters.AddWithValue("@differential", myobject.differential); }
else
{ dbCmd.Parameters.AddWithValue("@differential", DBNull.Value); }

dbCmd.ExecuteNonQuery();

В таблице базы данных дифференциальный столбец представляет собой пустое значение int без значения по умолчанию.

Дифференциальное свойство "myobject" является int? тип данных по умолчанию имеет значение null.

Проблема в том, что когда я запускаю хранимую процедуру, столбец дифференциала заводится с 0 на месте. Даже если «myobject.differential» имеет значение null, и я передаю в DBNull.Value, столбец все равно оказывается с 0 на месте. Я попытался не передавать @differential в хранимую процедуру, и он все еще устанавливает столбец в 0.

Я пробовал несколько различных решений, но ничего не помогло.

Заранее спасибо за любую помощь,

Скотт Веркуски

Ответы [ 3 ]

1 голос
/ 20 февраля 2009

Я считаю, что когда вы устанавливаете значение по умолчанию для такого параметра, как

@differential int = null

Вам не нужно добавлять его в свою команду SQL.

Попробуйте код только с этим и не включайте остальное ...

if (myobject.differential.HasValue)
{ 
   dbCmd.Parameters.AddWithValue("@differential", myobject.differential); 
}
0 голосов
/ 21 февраля 2009

Также проверьте, есть ли в таблице триггер, устанавливающий нулевые значения в ноль.

0 голосов
/ 20 февраля 2009

Вы уверены, что в дифференциальном столбце отсутствует Ограничение значения по умолчанию на нуле?

...