8

我需要一些关于如何处理以下内容的期望建议:- 我有一个数据字段 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”类型的转换无效。

我知道我错过了什么,但什么...

提前致谢

4

8 回答 8

13

您必须自己明确检查DBNull.Value并进行转换。

换句话说,考虑到,构建一个将为您进行转换的方法DBNull.Value

于 2009-02-11T10:23:42.703 回答
3

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

于 2009-02-11T10:30:44.013 回答
3

每次使用 Eval 时,都必须以某种方式填充惰性求值。为此,请替换以下每个实例:

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。

于 2011-10-11T19:23:29.213 回答
0

由于我们有一个为 MS-Dynamics (Solomon) 设置的遗留数据库,我们处理空值的方法是在 ASP 或 VB.NET 代码中将它们转换为空字符串。IE

Trim$(misc_text_2 & " ")

摆脱任何版本的 VB 的问题。

于 2010-06-22T21:20:16.330 回答
0

如果您使用的是数据集设计器,那么摆脱此错误的最简单方法是更改​​尊重列的属性。

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

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

于 2012-10-22T05:26:45.787 回答
0

对于转换 DBNull 或 IsDBNull,您可以尝试以下方法:

  1. 将 DBNull 转换为空字符串

    (DBNullObj).ToString

  2. 创建一个 DBNull 转换器函数

    公共函数 ConvertDBNullToString(DBNullObj As Object) 作为字符串

    如果 IsDBNull(DBNullObj) 那么

    返回 ””

    万一

    返回 DBNullObj

    结束功能

于 2014-03-05T03:15:17.087 回答
0

正如 spiritUMTP 建议的那样,如果您使用的是数据集设计器,请将 DataColumn.NullValue 从“Throw exception”更改为“empty”或“Nothing”。我选择了后者,它解决了问题。我现在只检查 Nothing (If IsNothing(columnFax) then ...)

于 2016-03-01T17:04:02.300 回答
-1

您可以在 sql 查询中使用 isNull(misc_text_2, '') 来返回空字符串而不是 DBNull。

于 2009-02-11T10:21:41.723 回答