Asp.net 如何处理从类型';DBNull';输入';字符串';无效
我需要一些关于如何处理以下内容的expect建议:-我有一个类型为varchar(25)的数据字段misc_text_2,允许NULL。现在,如果我使用以下语法Asp.net 如何处理从类型';DBNull';输入';字符串';无效,asp.net,dbnull,Asp.net,Dbnull,我需要一些关于如何处理以下内容的expect建议:-我有一个类型为varchar(25)的数据字段misc_text_2,允许NULL。现在,如果我使用以下语法 <asp:Label ID="lblPrinter" runat="server" Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2"
<asp:Label ID="lblPrinter" runat="server" Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2") like "KP1", "Kitchen Printer 1", iif(eval("misc_text_2") like "KP2", "Kitchen Printer 2", iif(eval("misc_text_2") like "KP3", "Kitchen Printer 3", iif(eval("misc_text_2") like "BP1", "Bar Printer 1", iif(eval("misc_text_2") like "BP2", "Bar Printer 2", iif(eval("misc_text_2") like "BP3", "Bar Printer 3", Eval("misc_text_2")))))))))%>'></asp:Label>
我不断获取错误异常详细信息:System.InvalidCastException:从类型“DBNull”到类型“String”的转换无效
我知道我错过了什么,但是
提前感谢您可以在sql查询中使用isNull(misc_text_2'')返回en空字符串,而不是DBNull。您必须明确检查
DBNull.Value
并自己进行转换
换句话说,构建一个方法来为您进行转换,同时考虑
DBNull.Value
。不回答您的问题,但是:
您应该真正创建一个代码隐藏方法来进行转换。这将使代码更易于理解和调试,并使代码能够重用。由于我们有一个为MS Dynamics(Solomon)设置的遗留数据库,我们处理空值的方法是在ASP或VB.NET代码中将它们转换为空字符串。 i、 e
摆脱了任何版本的VB的问题。每次使用Eval时,都必须以某种方式填充惰性求值。要执行此操作,请替换以下各项的每个实例:
iif(eval(“杂项文本”)如…
与
iif(IsDbNull(eval(“misc_text_2”))或lse eval(“misc_text_2”)如…
OrElse
将阻止尝试将DbNull转换为布尔值。但是,从更基本的角度来看,bang是最正确的。这一切都应该在代码后面完成,可能在ItemDataBound(或RowDataBound)事件处理程序中完成
进一步思考后…
O.p.还可能在其代码中使用
Convert.ToString()
方法,该方法将DBNulls转换为String.Empty。如果您使用的是数据集设计器,则消除此错误的最简单方法是更改列的属性
NullValue异常为“Empty”,而不是“Throw exception”
希望这能对大家有所帮助。对于convert DBNull或IsDBNull,您可以尝试以下方法:
正如spiritUMTP所建议的,如果您使用的是数据集设计器,请将DataColumn.NullValue从“抛出异常”更改为“空”或“无”。我选择了后者,它解决了问题。我现在只需检查无内容(如果为无(columnFax),则…)那是什么语言/环境?我猜是ASP。请您提及这一点并相应地标记问题好吗?永远不要用空字符串代替空字符串,这会降低数据集的可移植性,并且会歪曲数据模型。如果是空的,则是空的。让UI层担心如何显示它。这是您的观点ion。返回空字符串解决了他的问题,对吗?“empty不同于null”。这不是一个观点,而是一个事实。如果使用
“
而不是”
,则不需要使用修剪。仍然使用修剪,因为Dynamics只使用固定大小的填充为空的字段。Convert.ToString()救了我!
Trim$(misc_text_2 & " ")