由于'string'和'System.DBNull'之间没有隐式转换,无法确定条件表达式的类型。

36
param7[1].Value = tbLastName.Text.Length > 0 ? tbLastName.Text : DBNull.Value;

为什么这是不可能的,有没有其他尝试的建议?对于20个参数的if/else语句而言,这根本不可行。

1个回答

81
问题在于(正如错误消息所指出的),条件表达式需要两个分支具有相同的类型,或者需要存在从一个类型到另一个类型的隐式转换。在您的情况下,没有这样的转换,因此会出现错误。一种快速修复方法是将其中一个值强制转换为(object)(这很好,因为DbParameter.Value 的类型本来就是object )。所以以下代码应该适用于您:
param7[1].Value = tbLastName.Text.Length > 0 ? tbLastName.Text : (object)DBNull.Value;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接