Добрый день всем,
У меня проблема с хранимой процедурой, вставляющей неверное значение. Ниже приводится краткое изложение моей хранимой процедуры ...
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.
Я пробовал несколько различных решений, но ничего не помогло.
Заранее спасибо за любую помощь,
Скотт Веркуски