测试SQL参数是否为空或空值

本文关键字:空值 是否 SQL 参数 测试 | 更新日期: 2023-09-27 17:50:32

我正在执行一个简单的插入到SQL数据库。查询是参数化的,但是当我调用执行此插入的方法时,我可能并不总是想填充每个参数。

如下:

using (var sqlconnection = new SqlConnection(Globals.AFWideSettings.SqlConnectionString))
            {
                sqlconnection.Open();
                using (
                    var sqlcommand =
                        new SqlCommand(
                            "insert into DataActions (afuser, aftable, changetype, originaldata, newdata) values (@afuser, @aftable, @changetype, @originaldata, @newdata);",
                            sqlconnection))
                {
                    sqlcommand.Parameters.Add(new SqlParameter("afuser", userActions.AfUser));
                    sqlcommand.Parameters.Add(new SqlParameter("aftable", userActions.AfTable));
                    sqlcommand.Parameters.Add(new SqlParameter("changetype", userActions.ChangeType));
                    sqlcommand.Parameters.Add(new SqlParameter("originaldata", userActions.OriginalData));
                    sqlcommand.Parameters.Add(new SqlParameter("newdata", userActions.NewData));
                    sqlcommand.ExecuteNonQuery();
                }
                sqlconnection.Close();
            }
        }

如果我正在测试来自数据库的Null信息,我会这样做:

Id = getRecords.IsDBNull(0) ? -1 : getRecords.GetInt32(0)

在sqlparameters上是否有相同的方法?我难住了。

(我知道我可以单独测试每个项目,我只想提高效率)

多谢

测试SQL参数是否为空或空值

好吧,你必须填充每个参数,因为它是在你的SQL(除非你想动态删除字段/值,这将是混乱的)。

在设置参数值时,我将只使用NULL合并操作符(?? ?):

sqlcommand.Parameters.Add(
    new SqlParameter("afuser", userActions.AfUser ?? {insert default value here} ));

好的,基本语法如下:

CREATE PROCEDURE NameOfProcedure
/*
I like to put modification history, purpose for the procedure and stuff like that in here.
It's not required though
*/
(
@afuser NVARCHAR(255) DEFAULT NULL
,@aftable INT DEFAULT NULL

对所有变量都这样做,我已经展示了一个整数字段和一个nvarchar字段的示例,但使用任何数据类型。DEFAULT NULL位表示如果没有指定值,则使用NULL。

)
AS
BEGIN
INSERT INTO DataActions (afuser, aftable, changetype, originaldata, newdata)
VALUES (@afuser, @aftable, @changetype, @originaldata, @newdata)
END

可以使用DBNull值

I would recommend using Parameters.AddWithValue() Method for example see the code below

sqlcommand.Parameters.AddWithValue("@afuser", userActions.AfUser ?? (object)DBNull.Value);

MSDN SqlParameterCollection。AddWithValue方法