1. ホーム
  2. データベース
  3. 神託

C#からORACLEへの接続が乱れたコードの問題解決法

2022-01-23 06:26:17

以前、javaのプロジェクトをやったことがあり、あらゆるデータベースへの接続に慣れているのですが、最近、c#のプロジェクトに出会い、SqlServerデータベースへの接続は非常にうまくいくのですが、Oracleデータベースに出会うと萎えますので、いろいろ検索して、oracle.datamanager.dataaccess、System.Datamanager. OracleClient.OracleConnection、でもSystem.

方法1

接続文字列です。

"Provider=oraoledb.oracle;Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.10.10)(PORT = 1521)))(CONNECT_DATA = (SID = orcl)) ;User Id=user;Password=user")

エラー報告:データプロバイダーが登録されていません!

そこで検索を続けたところ、ネット上では、オラクル関連の接続コンポーネントをインストールする必要があり、これが面倒で、すべてのマシンにこのコンポーネントをインストールするのは不可能だとのことでした

そこで、解決策を探し続け、ようやく以下のような接続、つまり、Systemを使用した場合の接続が可能であることを発見しました。

接続文字列です。

"provider=msdaora.1;data source=(description = (address_list = (address = (protocol = tcp)(host =
10.20.10.10
)(PORT = 1521))(CONNECT_DATA = (SID = orcl)) ;ユーザーID=lswen;パスワード=1169".

注:Provider=MSDAORA.1; Provider=oraoledb.oracleではありません。

方法2

1. レジストリを開く:start-run-regedit

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1
マウス右クリック - 新規 - 文字列値 - 名前に変更しました。NLS_LANG 値を設定。簡体字中国語.zhs16gbkに設定されます。

2. マイコンピュータ - プロパティ - システムの詳細設定 - 環境変数 - システム変数の下にある新規をクリック - 変数名: NLS_LANG 変数値: 簡体字中国語.zhs16gbk

方法3

make1828の学生による解答

1: まず、oralce の文字コードを問い合わせる。select userenv('language') from dual;

2:環境変数にNLS_LANGを設定します。

3: 接続文字列を設定する。

プロバイダ=OraOLEDB.Oracle;ユーザID=***;パスワード=***;データソース=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = ***)(PORT = 1521 ))) (CONNECT_DATA = (SERVICE_NAME = ORCL)) )

4: Oracleクライアントをインストールします。(独自のオンライン検索でダウンロードすることができます)

5: 必要に応じてPLSQLツールをダウンロードする

BinaryDevelopからダウンロードすることができます。 https://www.codedevlib.com/softs/664139.html

メソッド4

最近、オラクルのデータベースのデータをプログラムで読み込むと、すべて文字化けしてしまうことがわかりました。そこで、この問題を解決するための一連のメソッドを始めました。

作業環境:サーバー windows 2003+ oracle.
/{br サーバーの文字セット SIMPLIFIED CHINESE_CHINA.WE8DEC.
プログラミング環境 VS2005, C#, PLSQL.

オプション1.

System.Data.OracleClient.OracleConnection クラスを使用して、データベースにアクセスします。

接続文字列です。

"データソース= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521))(CONNECT_DATA = (SID = DEV));User Id=lswen ;Password=1169)"

ローカルの文字コードをサーバーと同じに変更します。

レジストリのregdit:を開いてください。

NLS_LANGのHKEY_LOCAL_MACHINE↪SOFTWARE↩ORACLE↪SOFTWARE↩HOMEOに。simplified chinese_china.we8dec.

この方法は悪夢のようです、全く解決しません、この方法を使用してインターネット上で公開されている多くの人がいます。答えは、サーバーの文字セットがある場合、一方的です。ZHS16GBKは、このメソッドは解決することができます。文字セットWE8DECは西ヨーロッパの文字セット自体はいくつかの中国の文字が含まれている、それは2バイトのストレージメソッドに分割された中国の文字になるので、堆積中国語の文字の使用を許可する理由は、クライアントの他の中国の文字セットは、直接中国に復元することはできません。だから、クライアントとサーバーの一貫性を維持する必要があります----このオンラインは、右の彼らの理解かどうかわからないを参照してください。

オプション1が失敗しました。

シナリオ2.

System.Data.OleDb.OdbcConnection クラスを使用して、データベースにアクセスします。

接続文字列です。

"プロバイダ=MSDAORA.1;データソース=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521))(CONNECT_DATA = (SID = DEV)));User Id=lswen;Password=1169""です。

オプション1と同じ方法で、ローカルの文字セットをサーバーと同じに変更します。
/{br これでようやく問題が解決しました。

接続文字列はProvider=MSDAORA.1でなければならないことを強調してください。Provider=oraoledb.oracleは使えません。

オプション2 成功

概要を説明します。

WE8DECにしろ、他の西ヨーロッパ文字セットにしろ、この問題は2番目の解決策で解決されるはずです。