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