我需要一些关于如何处理以下问题的期望建议:-我有一个数据字段misc_text_2,其类型为varchar(25)并允许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 考虑到。

不是回答您的问题,而是:您应该真正创建一个可以进行转换的方法背后的代码。这将使代码更易于理解和调试,并将有可能重复使用代码。

每次使用评估时,您都必须以某种方式进行懒惰评估。为此,请替换每个实例:

iif(eval("misc_text_2") like ...

iif(IsDbNull(eval("misc_text_2")) OrElse eval("misc_text_2") like ...

OrElse 将防止任何尝试将dbnull转换为布尔值。但是,从更基本的角度来看,Bang是最校正的。这些都应完成代码,可能是在itemDatabound(或RowDatabound)事件处理程序中完成的。

进一步反思...

OP也可能利用 Convert.ToString() 他的代码中的方法将将dbnulls转换为string.empty。

由于我们有一个用于MS-Dynamics(所罗门)设置的旧数据库,因此我们处理nulls的方法是将其转换为ASP或VB.NET代码中的null字符串。 IE

Trim$(misc_text_2 & " ")

摆脱任何版本的VB问题。

如果您使用数据集设计器,消除此错误的最简单方法是更改​​相关列的属性。

NullValue 异常为“空”而不是“抛出异常”。

希望这会对大家有所帮助。

对于转换DBNULL或ISDBNULL,您可以尝试这种方法:

  1. 将dbnull转换为空字符串

    (dbnullobj)。

  2. 创建DBNULL转换器功能

    公共函数转换dbnulltoString(dbnullobj作为对象)为字符串

    如果是isdbnull(dbnullobj),则

    返回 ””

    万一

    返回dbnullobj

    结束功能

正如SpiritumTP所建议的那样,如果您使用的是数据集设计器,请将数据列室从“抛出异常”更改为“空”或“ nothing”。我选择了后者,它解决了问题。我现在什么都没有检查(如果没有(columnfax),那么...)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top