C# 从.net连接到oracle数据库时出错

C# 从.net连接到oracle数据库时出错,c#,.net,oracle10g,C#,.net,Oracle10g,我正在使用System.data.oracleclient命名空间,并将该dll放在项目的引用中 我被用作连接字符串 SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xx.x.xxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xxxx)));uid=xxxx;pwd=xxxx; 运行应用程序时,我收到的响应消息如下 OCIEnvCreate failed with return code -1 bu

我正在使用System.data.oracleclient命名空间,并将该dll放在项目的引用中

我被用作连接字符串

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xx.x.xxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xxxx)));uid=xxxx;pwd=xxxx;
运行应用程序时,我收到的响应消息如下

OCIEnvCreate failed with return code -1 but error message text was not available.
我不知道我在哪里卡住了

有谁能给我提供一些解决这个问题的指南吗

我也目瞪口呆,但没有得到正确的答案

等待您的宝贵建议和意见

更新1:

我使用的代码是

   con = new OracleConnection(conStr);
                con.Open(); // connection must be openned for command
                query = "insert into table1 values ('ss');
                cmd = new OracleCommand(query, con);
               if(cmd.ExecuteNonQuery()>0)
                {
                    Console.WriteLine("insert sucess!");
                }
                con.Close();
我的堆栈跟踪错误为

   at System.Data.OracleClient.OciHandle..ctor(OciHandle parentHandle, HTYPE handleType, MODE ocimode, HANDLEFLAG handleflags)
   at System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
   at System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
   at System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OracleClient.OracleConnection.Open()
   at oracleTest.Program.getconnection() in D:\oracle\oracletst[via-oracleclient]\oracletst\Program.cs:line 29
   at oracleTest.Program.Main(String[] args) in D:\oracle\oracletst[via-oracleclient]\oracletst\Program.cs:line 21
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

我发现可能导致问题的两件事

  • 您没有处理ado.net对象
  • con
    &
    cmd
    似乎是一个共享变量
  • 试试这个,看看问题是否仍然存在

    using(var con = new OracleConnection(conStr))
    using(var cmd = con.CreateCommand())
    {
        con.Open(); 
        cmd.CommandText = "insert into table1 values ('ss');
        if(cmd.ExecuteNonQuery() > 0)
        {
            Console.WriteLine("insert sucess!");
        }
    }
    
    因为我们使用的是
    using
    关键字,所以当块退出时,它将自动调用con/cmd.Dispose()。Dispose()将自动调用Close()

    编辑
    确保连接字符串的格式正确

    我想你是说这种事偶尔发生。如果是这样,问题很可能是您的连接/命令管理,而不是连接字符串本身。发布显示如何管理连接/命令的代码。或者,如果您使用的是ORM,那么您是如何管理上下文的。@JasonMeckley i updated check it它有何帮助?没有更多的信息,我们只是在猜测问题。