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