.net SqlParameter-设置为默认值

.net SqlParameter-设置为默认值,.net,sqlcommand,sqlparameter,.net,Sqlcommand,Sqlparameter,如何将a的值设置为与SQL INSERT语句的DEFAULT关键字等效的值 表示“使用null或不设置值以使用参数的默认值”。但是,执行这两种操作都会导致SqlException,抱怨未提供预期参数。我还尝试将参数设置为DBNull.Value,但这导致了对不允许使用null值的抱怨 正确的方法是什么 -- table schema CREATE TABLE SomeTable (Field INT NOT NULL DEFAULT(1)); using (var command = thi

如何将a的值设置为与SQL INSERT语句的
DEFAULT
关键字等效的值

表示“使用null或不设置值以使用参数的默认值”。但是,执行这两种操作都会导致SqlException,抱怨未提供预期参数。我还尝试将参数设置为DBNull.Value,但这导致了对不允许使用null值的抱怨

正确的方法是什么

-- 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();
}

根据我找到的信息,将
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();

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

谢谢!这会使预编译变得复杂,然后使用不同的参数集重用命令,但事实就是这样。