![](/img/trans.png)
[英]InvalidCastException when using datareader.getString() on a string field that contains numerical value
[英]How to fix System.InvalidCastException on DataReader.GetString()
问题是:我运行此代码(CODE 1),并在浏览器(ASP.NET)中获得System.InvalidCastException。 在另一个项目中运行并使用相同数据的完全相同的代码(在我的情况下,我在另一个项目中使用此功能)可以正常工作,并且不会引发任何异常。
我试图捕获此异常并查看问题对象(代码2)的内部,但随后我感到惊讶的是,没有异常被捕获(我在捕获代码块的第二行放置了一个断点,以确保),并且我得到正确的输出在浏览器中
代码1
private static List<Dictionary<string, object>> GetResultRows(SQLiteDataReader Reader)
{
List<Dictionary<string, object>> Result = new List<Dictionary<string, object>>();
if (!Reader.HasRows) return Result;
while (Reader.Read())
{
var CurrentRow = new Dictionary<string, object>();
Result.Add(CurrentRow);
for (int i = 0; i < Reader.FieldCount; i++)
{
CurrentRow.Add(Reader.GetName(i), Reader.GetString(i));
}
}
return Result;
}
代码2
private static List<Dictionary<string, object>> GetResultRows(SQLiteDataReader Reader)
{
List<Dictionary<string, object>> Result = new List<Dictionary<string, object>>();
if (!Reader.HasRows) return Result;
while (Reader.Read())
{
var CurrentRow = new Dictionary<string, object>();
Result.Add(CurrentRow);
for (int i = 0; i < Reader.FieldCount; i++)
{
//CurrentRow.Add(Reader.GetName(i), Reader.GetString(i));
try
{
CurrentRow.Add(Reader.GetName(i), Reader.GetString(i));
}
catch
{
var temp = Reader.GetValue(i);
System.Diagnostics.Debug.WriteLine($"{Reader.GetName(i)} = {Reader.GetValue(i)}");
}
}
}
return Result;
}
我希望此功能尽快完成,所以try-catch无法解决我的问题。 有任何想法吗?
UPD:浏览器异常: 图像
我认为基本答案是,如果value为null
, Reader.GetString(i)
将引发异常,因此您必须使用IsDBNull
进行检查。 有关更多信息,请参见此处:
Reader.GetString()与object.ToString()不同。 图片
UPD:从注释到C Perkins注释:“由于SQLiteDataReader检查从db文件数据集返回的列数据类型而出现。例如:如果列数据类型为整数并且我们运行GetString()方法,则SQLiteDataReader抛出异常。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.