当没有来自ddl的选定值时插入空值

时间:2010-09-14 16:44:08

标签: c#

我有ddl确定性别,用户可以不从ddl中选择任何值,所以我试图检查用户是否没有从ddl inser null值中选择任何值或者数据库中的任何值我做了但是错误apear(过程或函数' InsertRegisteration'期望参数'@Gender_Id',这是未提供的。)任何人帮助我

(我的代码)

 if (DDLGender.SelectedItem.Value[0]!= null )
  {
    command.Parameters.Add("@Gender_Id",SqlDbType.Int).Value=null;
  }
  else
  {
    command.Parameters.Add(Parameter.NewInt("@Gender_Id", DDLGender.SelectedValue));
  }

4 个答案:

答案 0 :(得分:1)

试试这个:

if (DDLGender.SelectedItem.Value[0]!= null ) 
{ 
   command.Parameters.Add("@Gender_Id",SqlDbType.Int).Value= DBNull.Value; 
} 
else 
{    
   command.Parameters.Add(Parameter.NewInt("@Gender_Id", DDLGender.SelectedValue)); 
}

已添加nullSystem.DbNull.Value之间的差异

好吧,null不是任何类型的实例。相反,它是无效的参考。

但是,System.DbNull.Value是对System.DbNull实例的有效引用(System.DbNull是单例,System.DbNull.Value为您提供对该类的单个实例的引用)表示数据库中不存在的 * 值。

*我们通常会说null,但我不想混淆这个问题。

所以,两者之间存在很大的概念差异。关键字null表示无效的引用。类System.DbNull表示数据库字段中不存在的值。一般来说,我们应该尽量避免使用相同的东西(在这种情况下为null)来表示两个非常不同的概念(在这种情况下是无效的引用与数据库字段中不存在的值)。

请记住,这就是为什么很多人一般都主张使用null object pattern,这正是System.DbNull的一个例子。

答案 1 :(得分:0)

试试这个:

if (DDLGender.SelectedIndex == 0 )
{
   command.Parameters.Add("@Gender_Id", DBNull.Value);
}
else
{
   command.Parameters.Add("@Gender_Id", (int)DDLGender.SelectedValue);
}

您没有 来指定参数的数据类型。

答案 2 :(得分:0)

假设您使用存储过程进行更新, 我认为您可以在存储过程中进行更改,使此INT列的默认值为NULL,这将使此参数可选。然后,您只能从代码中执行ELSE部分。

答案 3 :(得分:0)

您可以将以上代码行合并到:

cmd.Parameters.Add(new SqlParameter { SqlDbType = SqlDbType.Int, Value = DDLGender.SelectedIndex!=0 ? (int)DDLGender.SelectedValue :  null });

使用Null合并运算符将执行空检查。如果selectedItem不为null,那么它将作为值传入,否则将传递null。