0

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()
4

1 に答える 1

0

問題を引き起こしていると思われる 2 つのこと

  1. あなたはado.netオブジェクトを処分していません
  2. 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() を呼び出します。

編集 接続文字列が適切にフォーマットされていることを確認してください。http://www.connectionstrings.com/oracle

于 2012-09-17T13:05:46.873 に答える