测试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(除非你想动态删除字段/值,这将是混乱的)。
在设置参数值时,我将只使用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方法