我有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));
}
答案 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));
}
已添加:null
与System.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。