SqlParameters列表中的条件null值
本文关键字:null 条件 列表 SqlParameters | 更新日期: 2023-09-27 18:22:30
我们有一个代码块,它创建一个sqlParameters列表,然后将它们传递给存储过程。一个要求是根据输入文本框是否为空,有条件地使一些值为空。
基本代码:
var SqlParams = new List<SqlParameter> {
new SqlParameter("@SomeFloat", SqlDbType.FLoat) {Value = f},
....
}
我尝试了一些变体,但它不起作用,VS给出了一个错误,即float和null之间没有隐式转换。
new SqlParameter("@SomeFloat", SqlDbType.Float) {Value = (!string.IsNullOrEmpty(tb.Text) ? double.Parse(tb.Text) : DBNull.Value)},
有没有一种方法可以做到这一点——维护参数列表,这样我们就不必重写整个模块了?
感谢
您就快到了,您只需要确保条件运算符知道它的结果。将double.Parse
或DBNull.Value
中的一个转换为object
我还删除了一些括号,并交换了条件,使其更容易删除。
new SqlParameter("@SomeFloat", SqlDbType.Float)
{
Value = string.IsNullOrEmpty(tb.Text)
? DBNull.Value
: (object)double.Parse(tb.Text)
}
然而,我通常会做这样的
if (!string.IsNullOrEmpty(tb.Text))
command.Parameters.AddWithValue("@SomeFloat", double.Parse(tb.Text));
如果文本框为空,则不指定该值,并让存储过程处理这种情况。
我完全建议将每次调用指向一个方法,并让它决定将作为参数传递的值。
这是一个很好的扩展案例:
public static object TryParseSqlValue(this object input)
{
if (null == input)
return DBNull.Value;
if (input.GetType() == typeof(string) && input.ToString() == string.Empty)
return DBNull.Value;
else
return input;
}
myTextBox.Text.TryParseSqlValue(); // returns either the non-empty
// string or DBNull.Value
您可以针对其他数据类型对其进行修改。。。