我收到此错误(我正在使用Oracle.DataAccess dll):
{Oracle.DataAccess.Client.OracleConnection}
(Oracle.DataAccess.Client.OracleException).DataSource threw an exception of type 'System.NullReferenceException'
StackTrace:
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()
代码:
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();
}
}
}
任何输入都会有帮助吗?感谢。
答案 0 :(得分:4)
我从Oracle网站下载了 ODAC121021Xcopy_32bit 并解压缩并使用install.bat文件进行安装。
我确实面临同样的问题。谢谢Omaraguirre。正如Omaraguirre所述,引用了Oracle.ManagedDataAccess.dll,问题得到解决。我可以毫无问题地打开连接。
但我想弄清楚为什么Oracle.DatAccess.dll在尝试打开连接时会抛出Null引用异常。我发现需要支持dll(oci.dll,ociwin32.dll等)来打开连接而不会出错。 所以我将 instantclient_12_1 (此文件夹位于解压缩的ODAC121021Xcopy_32bit文件夹中)文件夹中的所有dll文件复制到oracle安装的bin目录( C:\ oracle \ bin ,在我的机)。现在,Oracle.DataAccess.dll在打开连接时不会抛出错误。
另外一件事是Oracle.ManagedDataAccess.dll将在内部加载所有支持的dll文件。但Oracle.DataAccess.dll要求支持的dll存在于执行的应用程序目录中(如果是控制台/ WinForm应用程序)或oracle安装的bin目录(如果是Web应用程序)。 可以在https://docs.oracle.com/database/121/ODPNT/intro003.htm#ODPNT131
找到Oracle.DataAccess.dll和Oracle.ManagedDataAccess.dll dll之间的区别答案 1 :(得分:2)
如果你没有,你可以尝试的一件事是运行DLL的托管(Oracle.ManagedDataAccess.dll)版本而不是非托管,我发现它修复了我的一些奇怪的oracle连接问题。托管版本是自包含的,不依赖于Oracle客户端,它可以无缝地在32位和64位上运行
答案 2 :(得分:1)
尝试了omaraguirre用户在评论中建议的建议。
按照这些步骤,它可能会有所帮助。
从项目中删除对Oracle.DataAccess的现有引用,并从下载的文件夹中添加新的Oracle.ManagedDataAccess.dll:odp.net \ managed \ common \ Oracle.ManagedDataAccess.dll。
设置它的属性Copy Local = True,这样它就会与你的项目一起部署。
不要忘记添加新的&#34;使用&#34;代码行:使用Oracle.ManagedDataAccess.Client;
您现在可以将项目平台目标更改为AnyCPU,它将起作用。