我試過所有這些工作,我知道我錯過了一些非常簡單的事情。無法使用SQL Server存儲過程更新記錄
我有一個調用存儲過程來更新一個表中的記錄的方法。
恰恰恰巧其中一個參數在數據庫中是可以爲空的,並且它的程序值在這種情況下以vehicleNo
列的空字符串(「」)形式出現。
所有其他記錄得到更新,除非一個空字符串進來,我嘗試和更新存儲過程的記錄。
可有人請指出我需要添加到正確使存儲過程或代碼的工作?
下面的代碼,我試過用硬編碼值執行存儲過程,但隨着ImageID
沒有更新。
存儲過程
ALTER PROCEDURE [dbo].[SPR_UPDATE_IMAGEID]
@ticketNo int,
@vehicleNo varchar(6) = NULL,
@imageID varchar(20)
AS
BEGIN
IF ((@vehicleNo = '') OR (@vehicleNo IS NULL))
BEGIN
UPDATE dbo.HH_FuelTkt
SET Image_ID = @imageID
WHERE Ticket_No = @ticketNo
AND Vehicle_No = NULL
END
ELSE
BEGIN
UPDATE dbo.HH_FuelTkt
SET Image_ID = @imageID
WHERE Ticket_No = @ticketNo
AND Vehicle_No = @vehicleNo
END END
C#代碼:
public static bool UpdateData(int ticketNo, string vehicleNo, string imageID)
{
int retValue = 0;
try
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HHInboundSqlConnection"].ToString()))
{
SqlCommand cmd = new SqlCommand("SPR_UPDATE_IMAGEID", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ticketNo", ticketNo);
cmd.Parameters.AddWithValue("@vehicleNo", vehicleNo);
cmd.Parameters.AddWithValue("@imageID", imageID);
cmd.Connection.Open();
retValue = cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
throw e;
}
return (retValue > 0);
}
手冊存儲過程執行#1:
DECLARE @return_value int
EXEC @return_value = [dbo].[SPR_UPDATE_IMAGEID]
@ticketNo = 147058,
@vehicleNo = N'''''',
@imageID = N'39084'
SELECT 'Return Value' = @return_value
手動存儲過程執行#2:
DECLARE @return_value int
EXEC @return_value = [dbo].[SPR_UPDATE_IMAGEID]
@ticketNo = 147058,
@vehicleNo = N'NULL',
@imageID = N'39084'
SELECT 'Return Value' = @return_value
這看起來錯 IF((@vehicleNo <> '')或(@vehicleNo IS NULL)) 豈不是@ vehicleN0 = ''? – ojf 2014-09-04 00:08:49
我沒有看到任何語法錯誤。我嘗試刪除一部分,然後另一部分;單獨運行它們,但仍然無法運行。 – sagesky36 2014-09-04 00:10:48
你不想檢查它是否爲空字符串或null?還有,在第二個sproc中,你是不是指 @vehicleNo = NULL 而不是nvarchar值'NULL' 另外,我不認爲你應該在你的字符串文字前使用N,因爲這表示nvarchar,你是使用變量 – ojf 2014-09-04 00:12:19