0

我正在对 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 上执行此操作的等效方法?我难住了。

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

非常感谢

4

3 回答 3

2

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

在设置参数值时,我只会使用NULL 合并运算符 (??) :

sqlcommand.Parameters.Add(
    new SqlParameter("afuser", userActions.AfUser ?? {insert default value here} ));
于 2013-01-02T21:51:44.557 回答
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
于 2013-01-02T21:47:18.817 回答
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 方法

于 2013-01-02T21:57:10.083 回答