我正在编写一个需要从 MAS-90 数据库中查询 2 个字段的 Windows 窗体应用程序。为此,我们使用了称为 SOTAMAS90 的 ProvideX 的 MAS 90 32 位 ODBC 驱动程序。这是我用来从 MAS-90 数据库中检索 DataTable 的代码。
public static DataTable getDatatable(string qry)
{
DataTable dt = new DataTable();
using (OdbcConnection conn = new OdbcConnection(GetSQLConnection()))
{
try
{
OdbcCommand cmd = new OdbcCommand(qry, conn);
cmd.CommandType = CommandType.Text;
conn.Open();
OdbcDataAdapter adpt = new OdbcDataAdapter(cmd);
adpt.Fill(dt);
cmd.Dispose();
conn.Close();
conn.Dispose();
}
catch (OdbcException e) { conn.Close(); }
catch (AccessViolationException ae) { conn.Close(); }
catch (UnauthorizedAccessException ue) { conn.Close(); }
}
return dt;
}
在线adpt.Fill(dt)
我得到以下异常:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
这昨天工作得很好。今天 Visual Studio 告诉我这是一个 Unhandled AccessViolationException,即使您可以清楚地看到 try/catch。我必须将<legacyCorruptedStateExceptionsPolicy enabled="true"/>
异常添加到我的配置文件中,以便在 try/catch 中捕获异常。
另一个奇怪的事情是我能够使用 Jaime De Los Hoyos M 的 ODBC 查询工具连接到数据库并运行相同的精确查询(只是从表中选择 2 个字段)。(可在此处获得)
非常感谢解决此问题的任何帮助。如果您需要更多信息,请告诉我。
我还想补充一点,我已经尝试过:
- 在我的应用程序中以 x86 为目标,因为驱动程序是 32 位的
- 授予对存储数据库的目录的权限
- 重启电脑
- 更改查询以添加参数
cmd.Parameters.AddWithValue("@PARAM", "Value")