我在网上看过几篇帖子,但没有一篇能解决我的问题。 在线发布的大多数问题都指向我从数据库中检查Dbnull值,我在代码中这样做。
这里是引发异常的代码:
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipeRefreshLayout_pitchList"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView_pitchList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:scrollbars="vertical">
</android.support.v7.widget.RecyclerView>
这是我检查dbnull值的代码:
int rowNum = Convert.ToInt32(dataTable.Rows[r][dataTable.Columns.Count - 2]);
这里我正在阅读excel电子表格中的值。
请指出正确的方向。 提前谢谢。
Dimpy
答案 0 :(得分:2)
在调用Convert.ToInt32之前检查DbNull :如您所见,如果值为DbNull,则会引发异常。 类似的东西:
object x = *value from db*
int y;
if (x != DbNull.Value)
y= Convert.ToInt32(x);
else
//handle null somehow
答案 1 :(得分:1)
您还可以查看:
dataTable.Rows[r].IsNull(c)
c
可以是索引,列名称或DataColumn
答案 2 :(得分:0)
for(int c = 1; c&lt; dataTable.Columns.Count - 2 ; c ++)
你不会检查第二个计数器 dataTable.Rows [r] [ dataTable.Columns.Count - 2 ] 可能是DBNull,你的转换失败
答案 3 :(得分:0)
我倾向于if(varFromSQL.ToString()!=&#34;&#34;)然后继续我的业务。每次都像魅力一样。 然后,如果我需要System.Convert.ToSomething(),我可以这样做。
答案 4 :(得分:0)
你可以尝试这样:DBNull.Value.Equals(dataTable.Rows [r] [c])如果你想要列的索引你可以在foreach中使用row [dataTable.Columns.IndexOf(col)]
for (int r = 0; r < dataTable.Rows.Count - 1; r++) //rows
{
foreach (DataColumn col in dataTable.Rows[r].Table.Columns)
{
if (!DBNull.Value.Equals(dataTable.Rows[r][col.ColumnName]))
{
haveValues = true;
}
}
并且请提供有关异常类型的更多信息,可能错误是访问无效索引=&gt; int rowNum = Convert.ToInt32(dataTable.Rows [r] [dataTable.Columns.Count - 2]);为什么你使用... Columns.Count - 2 ?,如果列数等于1怎么办?
我希望这会有所帮助。
此致
答案 5 :(得分:0)
我终于没有找到问题的解决方案。相同的代码适用于在同一项目上工作的同事。它必须是dd差异,可能是。我有一个较新版本的telerik和syncfusion dll,我们目前正在使用它,这可能也是一个问题。不确定,但我不想再花那么多时间了。