我正在执行一个简单的插入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上有相同的方法吗?我很难过。
(我知道我可以单独测试每个项目,我只想提高效率)
非常感谢
答案 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);