SqlParameter - 设置为默认值

Ben*_*udo 2 .net sqlcommand sqlparameter

如何将SqlParameter的值设置为相当于 SQL INSERT 语句的DEFAULT关键字?

MSDN 文档说“使用 null 或不设置 Value 以使用参数的默认值”。但是,执行任一操作都会导致 SqlException 抱怨未提供预期参数。我也尝试将参数设置为 DBNull.Value 但这导致抱怨不允许空值。

这样做的正确方法是什么?

-- table schema
CREATE TABLE SomeTable (Field INT NOT NULL DEFAULT(1));


using (var command = this.conn.CreateCommand())
{
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (@p0);";

    var param = new SqlParameter();
    param.ParameterName = "@p0";
    //param.Value = ??;
    command.Parameters.Add(param);

    command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*z M 5

根据我发现的信息,将 分配null给值的技巧有效,但是当用于存储过程参数时。

我猜您想使用您发布的代码将一些自定义值以及默认值插入表中。如果是这样,我想使您的代码工作的最简单方法是在未指定值时调用不同的查询:

...
int? myValue = null; // I assumed You use a nullable int to pass the value to the method
...
if (!myValue.HasValue)
{
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (DEFAULT);";
}
else
{
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (@p0);";

    var param = new SqlParameter();
    param.ParameterName = "@p0";
    param.Value = myValue.Value;
    param.DbType = System.Data.DbType.Int32;
    command.Parameters.Add(param);
}

command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

这应该允许您处理默认和非默认情况。