我正在开发一个C#应用程序,它将连接到本地数据源并从中提取数据。我遇到的问题是,如果我尝试运行查询,例如“SELECT SYSDATA FROM DUAL”,我会收到以下消息:
错误:捕获到OverflowException错误。
消息:算术运算导致溢出。
如果我尝试任何其他查询,我会收到相同的消息。
该程序是作为64位应用程序构建的
数据库本地存储在机器上
数据源使用的驱动程序是OraClient 11g_home2中的Oracle
驱动程序版本为11.02.00.01。
这是我的连接代码:
try {
string connectionString =
"DSN="+_dsn+
";DBQ="+_dbq+
";DBA=R"+
";Uid="+_uid+
";Pwd="+_pwd;
using (_odbc_conn = new OdbcConnection(connectionString)) {
Console.WriteLine("Establishing connection...");
_odbc_conn.Open();
Console.WriteLine("\nConnection successful!\n");
Console.WriteLine("== Connection Status ==");
Console.WriteLine("Connection String: " + _odbc_conn.ConnectionString);
Console.WriteLine("Connection State: " + _odbc_conn.State);
Console.WriteLine("Connection Timeout: " + _odbc_conn.ConnectionTimeout);
Console.WriteLine("Database: " + _odbc_conn.Database.ToString());
Console.WriteLine("Data Source: " + _odbc_conn.DataSource);
Console.WriteLine("Driver: " + _odbc_conn.Driver);
Console.WriteLine("Server Version: " + _odbc_conn.ServerVersion);
Console.WriteLine("Schema: " + _odbc_conn.GetSchema() + "\n");
if (_odbc_conn.State == ConnectionState.Open) {
Console.WriteLine("== Query Results ==");
RunQuery();
}
}
} catch(OdbcException e) {
Console.WriteLine("Error: Failed to establish connection!");
for (int i=0; i<e.Errors.Count; i++) {
Console.WriteLine("Index #" + i + "\n" +
"Message: " + e.Errors[i].Message + "\n" +
"NativeError: " + e.Errors[i].NativeError.ToString() + "\n" +
"Source: " + e.Errors[i].Source + "\n" +
"SQL: " + e.Errors[i].SQLState + "\n");
}
}
如果有人可以帮忙解决这个问题,我会非常感激
谢谢!
编辑:我忘记了我的查询代码:
private void RunQuery() {
try {
_odbc_cmd = new OdbcCommand();
_odbc_cmd.Connection = _odbc_conn;
_odbc_cmd.CommandText = "SELECT SYSDATE FROM DUAL";
_odbc_cmd.ExecuteNonQuery();
} catch (OdbcException e) {
...
_odbc_conn.Close();
}
编辑#2:语法改变没有成功。
_odbc_cmd = new OdbcCommand("SELECT SYSDATE FROM DUAL", _odbc_conn);
using (OdbcDataReader reader = _odbc_cmd.ExecuteReader()) {
while (reader.Read()) {
Console.WriteLine(reader.GetString(0));
}
}
这导致与以前相同的算术错误。