无法使用SQL Server存储过程更新记录

时间:2014-09-04 00:03:33

标签: c# sql sql-server ado.net

我已经尝试了一切来实现这一点,我知道我错过了一些非常简单的事情。

我有一个调用存储过程来更新表中记录的方法。

恰好,其中一个参数在数据库中可以为空,并且它的程序值作为空字符串("")在此特定的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

1 个答案:

答案 0 :(得分:2)

IF ((@vehicleNo = '') OR (@vehicleNo IS NULL))
BEGIN
    UPDATE dbo.HH_FuelTkt
        SET Image_ID = @imageID
        WHERE Ticket_No = @ticketNo
          **AND Vehicle_No = NULL** 
END

更改

AND Vehicle_No = NULL

AND Vehicle_No IS NULL

通常在SQL检查可空值上我们使用IS NULL而不是= NULL