如果值不为 NULL,如何更新列



如果从 C# 输入的值不是NULL,我想更新表 TBL_Log 的任何列。这是我的存储过程:

Alter PROCEDURE [dbo].[SP_Update_User] 
(@User_id as int,@User_Names as nvarchar(max),@End as char(8),@Start as nvarchar(max) ,@Count as int)
AS
BEGIN

UPDATE [dbo].[TBL_Log]

     SET User_Names = @User_Names
      ,[Start] = @start
      ,[End] = @End
      ,[Count] = @Count
      where User_id = @User_id

END

我试图完成这项工作,但没有成功。

类 D1 中的代码:

public static DataSet Update_User(int @User_id, string @User_Names, string @End, string @Start, int @Count)
    {
        SqlConnection myConnection = new SqlConnection(strConecctionString);

        SqlDataAdapter sqlcmd = new SqlDataAdapter("SP_Update_UserData_Bot", myConnection);
        sqlcmd.SelectCommand.CommandType = CommandType.StoredProcedure;

        SqlParameter parameterID_category_ID = new SqlParameter("@User_id", SqlDbType.Int);
        parameterID_category_ID.Value = User_id;
        sqlcmd.SelectCommand.Parameters.Add(parameterID_category_ID);
        SqlParameter parameterID_Part_ID = new SqlParameter("@User_Names", SqlDbType.Int);
        parameterID_Part_ID.Value = User_Names;
        sqlcmd.SelectCommand.Parameters.Add(parameterID_Part_ID);

        SqlParameter parameterID_Series_ID = new SqlParameter("@End", SqlDbType.Char);
        parameterID_Series_ID.Value = End;
        sqlcmd.SelectCommand.Parameters.Add(parameterID_Series_ID);
        SqlParameter parameterID_Model_ID = new SqlParameter("@start", SqlDbType.NVarChar);
        parameterID_Model_ID.Value = start;
        sqlcmd.SelectCommand.Parameters.Add(parameterID_Model_ID);
        SqlParameter parameterID_Count = new SqlParameter("@Count", SqlDbType.Int);
        parameterID_Count.Value = Count;
        sqlcmd.SelectCommand.Parameters.Add(parameterID_Count);

        sqlcmd.SelectCommand.CommandTimeout = int.MaxValue;
        DataSet DS = new DataSet();
        sqlcmd.Fill(DS);

        return DS;
    }

这将仅更新非 null 的值。如果值为 null,则列将更新回其自己的值。

UPDATE [dbo].[TBL_Log]
SET    User_Names = isnull(@User_Names, User_Names)
     , [Start] = isnull(@start, [Start])
     , [End] = isnull(@End, [End])
     , [Count] = isnull(@Count, [Count])
where User_id = @User_id

你应该显示你的 .Net 代码。添加检查的最佳位置可能是在 .NET 中,如果您担心的值为 NULL,则不要调用存储过程。

此外,您还必须指定哪个值不应为 null,但假设您的意思是其中任何一个,您可以执行以下操作:

IF (@User_Names IS NULL OR @start IS NULL OR @End IS NULL OR @Count IS NULL OR @User_Id IS NULL)
BEGIN
    RETURN
END

如果任何参数为 null,则将退出存储过程而不更新表

给定 c# 代码,可以在值为 null 时不调用存储过程或引发异常。此外,您还应考虑对日期值使用DateTime而不是字符串。

可以在 c# 代码中执行以下操作:

if (@User_Names == null || @End == null || @Start == null)
  return;

或者最好

if (@User_Names == null || @End == null || @Start == null)
  throw new ArgumentNullException();

您甚至可以单独检查每个参数,并将其名称作为参数传递给异常,以提供有意义的错误消息。

你注释掉的逻辑很好:

UPDATE [dbo].[TBL_Log]
     SET User_Names = @User_Names,
         [Start] = @start,
         [End] = @End,
         [Count] = @Count
      where User_id = @User_id and
            (@User_Names is not null and
             @AkharinBazdid is not null and
             @Pid_Bazdid  IS NOT NULL and
             @C_Bazdid IS NOT NULL
            );

如果您愿意,也可以使用IF

笔记:

  • 不要使用 SQL 关键字和保留字作为列名。 转义字符只是碍手碍脚。
  • 如果startend是日期/时间,则使用适当的类型。 不要使用字符串。

相关内容

  • 没有找到相关文章

最新更新