我正在编写一个Windows Forms应用程序,该应用程序需要从MAS-90数据库中查询2个字段。为此,我们使用ProvideX的称为SOTAMAS90的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 / catches。我必须将<legacyCorruptedStateExceptionsPolicy enabled="true"/>
添加到配置文件中,只是为了在try / catch中捕获异常。
另一个奇怪的是,我能够使用Jaime De Los Hoyos M.的ODBC Query Tool连接到数据库并运行相同的精确查询(只需从表中选择2个字段)({{3} })
对于解决此问题的任何帮助,我们深表感谢。如果需要其他信息,请告诉我。
我还想补充一点,我尝试过:
cmd.Parameters.AddWithValue("@PARAM", "Value")
的参数