Asp.net 如何处理从类型';DBNull';输入';字符串';无效

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"

我需要一些关于如何处理以下内容的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") 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,您可以尝试以下方法:

  • 将DBNull转换为空字符串

    (DBNullObj).ToString

  • 创建一个DBNull转换器函数

    公共函数ConvertDBNullToString(DBNullObj作为对象)作为字符串

    如果是IsDBNull(DBNullObj),则

    返回“”

    如果结束

    返回DBNullObj

    端函数


  • 正如spiritUMTP所建议的,如果您使用的是数据集设计器,请将DataColumn.NullValue从“抛出异常”更改为“空”或“无”。我选择了后者,它解决了问题。我现在只需检查无内容(如果为无(columnFax),则…)

    那是什么语言/环境?我猜是ASP。请您提及这一点并相应地标记问题好吗?永远不要用空字符串代替空字符串,这会降低数据集的可移植性,并且会歪曲数据模型。如果是空的,则是空的。让UI层担心如何显示它。这是您的观点ion。返回空字符串解决了他的问题,对吗?“empty不同于null”。这不是一个观点,而是一个事实。如果使用
    而不是
    ,则不需要使用
    修剪。仍然使用修剪,因为Dynamics只使用固定大小的填充为空的字段。Convert.ToString()救了我!
    
    Trim$(misc_text_2 & " ")