如何在SQL Parameter.AddWithValue中设置DEFAULT

时间:2017-11-12 02:47:52

标签: c# sql-server

我基本上是为了让这个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是一个字符串而不是保留字词默认

所以...我从前面提到的问题中看到我不能使用保留的词语默认值作为值。我还看到了你可以在哪里重写SQL ......这样可以工作,但可能会因多个字段而变得毛茸茸。

1 个答案:

答案 0 :(得分:3)

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

说,我可以想到两种选择。

  1. 如果您已决定在数据库表中添加默认constrait,则在提供的代码中包含if语句,如果oSB.ZipCode == ""则不要 完全插入值,让数据库处理它。
  2. 示例:

    if(oSB.ZipCode == "")
    {
         string anotherSql = "INSERT INTO Employee (EmployeeID) " +
                             "VALUES (@EmployeeID); " ;
         ...
         ...
    } 
    
    1. 而不是在数据库表上创建默认约束,创建 一个存储过程,它带有两个参数,其中一个参数有 如果未指定参数ZipCode,则为默认值。
    2. 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范围内的任意数量的参数。