gpt4 book ai didi

c# - 为什么 OdbcCommand.ExecuteScalar() 抛出 AccessViolationException?

转载 作者:行者123 更新时间:2023-11-30 17:25:04 25 4
gpt4 key购买 nike

我有一段代码旨在从数据库表中提取文本描述并将它们保存到文本文件中。它看起来像这样 (C# .NET):

        OdbcCommand getItemsCommand = new OdbcCommand("SELECT ID FROM ITEMS", databaseConnection);
OdbcDataReader getItemsReader = getItemsCommand.ExecuteReader();
OdbcCommand getDescriptionCommand = new OdbcCommand("SELECT ITEMDESCRIPTION FROM ITEMS WHERE ID = ?", databaseConnection);
getDescriptionCommand.Prepare();
while (getItemsReader.Read())
{
long id = getItemsReader.GetInt64(0);
String outputPath = "c:\\text\\" + id + ".txt";
if (!File.Exists(outputPath))
{
getDescriptionCommand.Parameters.Clear();
getDescriptionCommand.Parameters.AddWithValue("id", id);
String description = (String)getDescriptionCommand.ExecuteScalar();
StreamWriter outputWriter = new StreamWriter(outputPath);
outputWriter.Write(description);
outputWriter.Close();
}
}
getItemsReader.Close();

此代码已成功将部分数据保存到 .txt 文件,但对于许多行,在以下行抛出 AccessViolationException:

                String description = (String)getDescriptionCommand.ExecuteScalar();

异常文本是“试图读取或写入 protected 内存。这通常表示其他内存已损坏”。

程序通常会在表的相同行上抛出异常,但看起来并不是 100% 一致。有时过去抛出异常的数据会突然工作。

毫无疑问,有些人想知道为什么我不只是在 getItemsCommand 中从 ITEMS 中选择 ID、ITEMDESCRIPTION 并跳过第二个查询。实际上,我最初就是这样做的,我遇到了与 getItemsCommand.GetString() 相同的错误。我担心数据集可能占用了太多内存,这可能导致了错误。所以我决定试试这个方法,看看它是否有帮助。它没有。有谁知道为什么会发生这种情况?

顺便说一句,ID 是一个 INT,ITEMDESCRIPTION 是一个 VARCHAR(32000) 列。如果有任何区别,数据库是 Borland Interbase 6.0(Ick!)

编辑:我在描述抛出异常的位置时给出了错误的行!!啊!!现在修好了。另外,到目前为止,我已经尝试了建议的方法,但没有帮助。但是,我发现只有数据库中非常旧的记录导致了这个错误,这很奇怪。如果我将查询更改为仅提取最近 5 年插入的记录,则没有问题。有人向我建议这可能是编码转换问题或类似问题?

更新: 解决了。问题原来是我们不太可靠的数据库软件的 ODBC 驱动程序中的错误。与其他驱动程序一起使用的解决方法解决了该问题。

最佳答案

这可能是您使用的 ODBC 驱动程序中的错误。它是什么驱动程序?你的连接字符串是什么?

关于c# - 为什么 OdbcCommand.ExecuteScalar() 抛出 AccessViolationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com