测试SQL参数的null或空值

时间:2013-01-02 21:36:35

标签: c# sql

我正在执行一个简单的插入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上有相同的方法吗?我很难过。

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

非常感谢

3 个答案:

答案 0 :(得分:2)

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

我在设置参数值时只使用NULL coalesce operator (??)

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

答案 1 :(得分:0)

好的,基本语法如下:

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

答案 2 :(得分:0)

你可以使用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 Method