我收到此错误(我正在使用 Oracle.DataAccess dll):
{Oracle.DataAccess.Client.OracleConnection}
(Oracle.DataAccess.Client.OracleException).DataSource threw an exception of type 'System.NullReferenceException'
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪 :
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32
errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx*
pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Int32
isRecoverable)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,
OracleConnection conn, IntPtr opsErrCtx, Object src)
at Oracle.DataAccess.Client.OracleConnection.Open()
Run Code Online (Sandbox Code Playgroud)
代码:
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString))
{
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "<<Procedure Name>>";
cmd.Parameters.Add("v_cur", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
conn.Open(); --line throws exception
using (OracleDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
retVal = reader["VALUE"].ToString();
}
reader.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何输入都会有帮助吗?谢谢。
我从 Oracle 网站下载了ODAC121021Xcopy_32bit并解压缩 zip 并使用 install.bat 文件进行安装。
我确实遇到了同样的问题。谢谢奥马拉吉雷。正如 Omaraguirre 所说,引用了 Oracle.ManagedDataAccess.dll,问题得到了解决。我可以毫无问题地打开连接。
但我想弄清楚为什么 Oracle.DatAccess.dll 在尝试打开连接时抛出空引用异常。我发现需要支持 dll(如 oci.dll、ociwin32.dll 等)才能打开连接而不会出现错误。因此,我将所有 dll 文件从instantclient_12_1(此文件夹位于提取的 ODAC121021Xcopy_32bit 文件夹中)文件夹复制到 oracle 安装的 bin 目录(在我的计算机中为C:\oracle\bin)。现在,Oracle.DataAccess.dll 在打开连接时不会抛出错误。
另一件事是 Oracle.ManagedDataAccess.dll 将在内部加载所有支持的 dll 文件。但是 Oracle.DataAccess.dll 要求支持 dll 存在于执行应用程序目录(如果是控制台/WinForm 应用程序)或 Oracle 安装的 bin 目录(如果是 Web 应用程序)中。Oracle.DataAccess.dll 和 Oracle.ManagedDataAccess.dll 之间的区别可以在 @ https://docs.oracle.com/database/121/ODPNT/intro003.htm#ODPNT131找到
| 归档时间: |
|
| 查看次数: |
6201 次 |
| 最近记录: |