【问题标题】:SqlParameter - Setting to DEFAULT ValueSqlParameter - 设置为默认值
【发布时间】:2015-10-02 07:10:20
【问题描述】:

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

MSDN documentation 表示“使用 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();
}

【问题讨论】:

    标签: .net sqlcommand sqlparameter


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这使得预编译然后重用具有不同参数集的命令变得复杂,但它就是这样。
    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多