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

C# 测试SQL参数是否为空值或空值,c#,sql,C#,Sql,我正在对SQL数据库执行一个简单的插入。查询是参数化的,但当我调用执行此插入的方法时,我可能并不总是希望填充每个参数 详情如下: using (var sqlconnection = new SqlConnection(Globals.AFWideSettings.SqlConnectionString)) { sqlconnection.Open(); using (

我正在对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();
            }
        }
如果我正在测试数据库中是否有空信息,我会执行以下操作:

Id = getRecords.IsDBNull(0) ? -1 : getRecords.GetInt32(0)
有没有对sqlparameters执行此操作的等效方法?我被难住了

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


非常感谢

好的,基本语法如下:

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字段的示例,但是使用任何数据类型。默认的NULL位表示如果未指定值,则使用NULL

)
AS
BEGIN

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

END

嗯,您必须填充每个参数,因为它在您的SQL中(除非您希望动态删除字段/值,否则会很混乱)

在设置参数值时,我只使用:

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

您可以使用DBNull值来完成

我建议使用Parameters.AddWithValue()方法,例如,请参见下面的代码

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

您可以创建一个默认值为NULL的存储过程,然后只传入您拥有的数据。你以前写过SPs吗?不多,我倾向于在VS(仍在学习)中做所有事情。你使用的是什么风格的SQL?Oracle、SQL Server、IBM等。Damo顺便说一句,你并不笨,实际上你问一个问题是件好事,我个人认为这是一个好问题。我建议将sqlcommand.Parameters.Add更改为sqlcommand.Parameters.AddWithValue()服务器知道如何处理参数化的值…@DJKRAZE使用AddWithValue而不是Add的额外好处是什么?在填写过程名称时,使用schema.name,例如dbo.data\u action\u insert,假设他想要的默认值是
NULL
,即
userActions.AfUser??DbNull.Value