C# 如何在SQL Parameter.AddWithValue中设置默认值

C# 如何在SQL Parameter.AddWithValue中设置默认值,c#,sql-server,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, GetC

我基本上是想让这个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是一个字符串,而不是保留单词DEFAULT


所以…我从前面的问题中看到,我不能使用保留字DEFAULT作为值。我还看到了可以重写SQL的地方……这可以工作,但在多个字段中可能会出现问题。

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

也就是说,我可以想到两种选择

  • 如果您决定在数据库表中添加默认构造,则在提供的代码中包含一个
    if
    语句,其中if
    oSB.ZipCode==”
    ,则不要 插入该值并让数据库处理它
  • 例如:

    if(oSB.ZipCode == "")
    {
         string anotherSql = "INSERT INTO Employee (EmployeeID) " +
                             "VALUES (@EmployeeID); " ;
         ...
         ...
    } 
    
  • 不是在数据库表上创建默认约束,而是创建 一种存储过程,它具有两个参数,其中一个具有 如果未指定参数
    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

    范围内的任意数量的参数,哪个RDBMS?您始终可以将sql命令更改为“INSERT-INTO-Employee(EmployeeID)”+“值(@EmployeeID);当您希望传递默认值时。您是否尝试过不传递默认参数的任何内容,这可能会起作用?请签出此帖子:@Chris-您为什么认为这不会起作用。您尝试过吗?只要数据库中的
    @ZipCode
    参数是字符串,它就应该起作用。运行代码段时会出现什么错误?Microsoft Database.Related post-.@RBT这是一个很好的复制候选…我喜欢存储过程的想法,它让我思考…为什么不从模式表中获取默认的_值呢。