繁体   English   中英

如何在DataReader.GetString()上修复System.InvalidCastException

[英]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为nullReader.GetString(i)将引发异常,因此您必须使用IsDBNull进行检查。 有关更多信息,请参见此处:

SQL数据读取器-处理空列值

Reader.GetString()与object.ToString()不同。 图片

UPD:从注释到C Perkins注释:“由于SQLiteDataReader检查从db文件数据集返回的列数据类型而出现。例如:如果列数据类型为整数并且我们运行GetString()方法,则SQLiteDataReader抛出异常。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM