【问题标题】:DBNull error when attempting to add commas to numbers尝试将逗号添加到数字时出现 DBNull 错误
【发布时间】:2013-12-12 23:48:15
【问题描述】:

对于如何修复此处的错误,我感到有些困惑。我有一个带有一系列数字的网格视图(它们在数据库中的显示方式示例如下),我想在其中添加逗号。我试图用文字(下面的代码)在 ASP 代码中完成这项工作。与下面的东西相关联的表可以调用 foo,列名称为“count”。如果没有 TemplateField 和文字(如下所述),gridview 可以正常工作。但是,当我在下面添加 TemplateField 时,我得到一个“对象不能从 DBNull 转换为其他类型”。从浏览器。我要做的就是让gridview 输出在ASP 代码中而不是在数据库中显示逗号。

我尝试过的:

首先我认为可能有一些奇怪的字符、尾随空格或类似的东西,所以我运行了以下命令:

select * from foo where count not like '%[^0-9]%'

只有它返回表中的每一个条目。我手动检查了一些结果,并且在我想添加逗号的列中没有任何尾随空格或奇数字符。

我很困惑接下来要尝试什么,因为我已经能够让它在我的测试服务器上工作,但不能在生产环境中工作。

列示例

计数

2345342
4356546
3245234534
67465745675
43523452345
546234523452345
32452345
4352345234
4352345
345234

当我们从各种来源导入数据时,这些数据作为 NVARCHAR(MAX)(允许为空)输入到数据库中。

代码

   <asp:TemplateField HeaderText="Count" SortExpression="count">
        <EditItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("count") %>'></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Literal ID="Literal1" runat="server" Text='<%# string.Format("{0:N0}", Convert.ToDecimal(Eval("count"))) %>'>
            </asp:Literal>
        </ItemTemplate>
        <HeaderStyle BackColor="#6699FF" />
    </asp:TemplateField>

错误

对象不能从 DBNull 转换为其他类型。

【问题讨论】:

    标签: c# asp.net sql gridview literals


    【解决方案1】:

    我猜你在某个地方有一个空值,如果你尝试在模板中将它转换为十进制,你会得到那个错误。您需要输入一些代码来禁止这样做。

    string.Format("{0:N0}", Convert.ToDecimal(Eval("count")==DBNull.Value ? "0" : Eval("count")))
    

    【讨论】:

    • 就是这样。列中没有任何空值。这就是让我头疼的原因。
    【解决方案2】:

    您是否考虑过在查询中使用 IsNull 包装可能包含空值的列。在数据库中解决问题

    select *,isnull([count],0) from foo where count not like '%[^0-9]%'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 2013-10-18
      • 2020-12-21
      • 2018-05-25
      • 2012-02-16
      相关资源
      最近更新 更多