C#からORACLEへの接続が乱れたコードの問題解決法
以前、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番目の解決策で解決されるはずです。
関連
-
オラクル表領域拡張の詳細
-
ORCALテンポラリーテーブルの作成と削除
-
PLSQLは、ローカルオラクルまたはリモートオラクルデータベースに接続し、ランダムスイッチ機能を実現します。
-
Oracleデッドロック検出クエリとその処理
-
Oracle11gアンインストール完全版グラフィックチュートリアル
-
Navicat PremiumツールでOracleデータベースをMySQLに移行する
-
オラクルのTO_DATEの使い方解説
-
Oracle 11g R2 インストールチュートリアル フルバージョン
-
[解決済み] ORA-01799: 列がサブクエリに外部結合されていない可能性があります。
-
[解決済み] ORA-00119: 無効な仕様 ORA-00132: 構文エラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PLSQLDeveloper14を使用したOracle11gへの接続手順を詳しく伝授
-
plsqlを使用してリモートOracleデータベースに接続する複数の方法
-
[解決済み】Oracle Databaseで「SET DEFINE OFF」を使用するタイミングと理由
-
[解決済み] ORA-01461: LONG 値は、LONG 列への挿入にのみバインドできます-クエリー時に発生します。
-
[解決済み] ORA-01950: テーブルスペース 'USERS' に特権がありません [閉鎖]。
-
[解決済み] Oracleで変数を宣言して表示する方法
-
[解決済み] 1行のみ追加 "ORA-02290: チェック制約 (SYS_C0012762) 違反 ORA-01403: データが見つかりません"
-
[解決済み] BATCHEDのインデックスによるテーブルアクセスとROWIDのインデックスによるテーブルアクセスの違い
-
[解決済み] ORA-01407:NULLに更新できません。
-
[解決済み] ORA-04082: テーブルレベルのトリガーで NEW または OLD 参照は許可されません。