【问题标题】:How to set DEFAULT in SQL Parameter.AddWithValue [duplicate]如何在 SQL Parameter.AddWithValue 中设置 DEFAULT [重复]
【发布时间】:2017-11-12 02:47:51
【问题描述】:

我基本上是想让这个 sql 语句为 ZipCode 或单词 DEFAULT 设置一个值。

 public static void AddEmployee(SB oSB)
  {
     string sSql = "INSERT INTO Employee (EmployeeID,ZipCode) " +
                   "VALUES (@EmployeeID,@ZipCode); " ;

     SqlCommand cmd = new SqlCommand(sSql, GetConnection());
     cmd.Parameters.AddWithValue("@EmployeeID", oSB.EmployeeID);

     string sZipCode = (oSB.ZipCode == "") ? "DEFAULT":oSB.ZipCode; 

     cmd.Parameters.AddWithValue("@ZipCode", sZipCode);
    ...
  }

这不起作用,因为单词 DEFAULT 是一个字符串,而不是 RESERVED WORD DEFAULT

所以...我从之前提出的问题中看到,我不能使用 RESERVED WORD DEFAULT 作为值。我还看到了你可以在哪里重写 SQL……这可行,但可能会因为多个字段而变得麻烦。

【问题讨论】:

  • 哪个 RDBMS?当您想传递默认值时,您始终可以将 sql 命令更改为“INSERT INTO Employee (EmployeeID)”+“VALUES (@EmployeeID);。您是否尝试过不为默认参数传递任何内容,这可能有效?检查一下帖子:stackoverflow.com/questions/8777362/…
  • @Chris - 为什么你认为这行不通。你有没有尝试过?只要@ZipCode 参数在您的数据库中是字符串,它就应该可以工作。运行代码 sn-p 时遇到什么错误?
  • 微软数据库。
  • @RBT 这是一个很好的复制人选......

标签: c# sql-server


【解决方案1】:

您根本不需要这样做。这种事情应该在数据库级别完成。您需要确保数据库表中的列具有DEFAULT 约束,该约束将添加到所有新记录如果未指定值

也就是说,我能想到两个选项。

  1. 如果您决定在数据库表上添加默认约束,则在提供的代码中包含 if 语句,如果 oSB.ZipCode == "" 则不要 插入值并让数据库处理它。

示例:

if(oSB.ZipCode == "")
{
     string anotherSql = "INSERT INTO Employee (EmployeeID) " +
                         "VALUES (@EmployeeID); " ;
     ...
     ...
} 
  1. 不是在数据库表上创建默认约束,而是创建 一个存储过程,它接受两个参数,其中一个具有 如果未指定参数ZipCode,则为默认值。

SQL Server 示例:

CREATE PROCEDURE spr_AddNewRecord  
   @EmployeeID INT,
   @ZipCode VARCHAR(10) = 'GX11 1AA' // Default value here
AS  
BEGIN    
   INSERT INTO Employee (EmployeeID, ZipCode)
   VALUES (@EmployeeID, @ZipCode)
END

现在您所要做的就是从您的代码中调用存储过程并传入1-2 范围内的任意数量的参数。

【讨论】:

  • 我喜欢存储过程的想法,它让我思考...为什么不直接从模式表中获取 DEFAULT_VALUE。
猜你喜欢
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多