問題タブ [system.data.oracleclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - system.data.oracleclient を使用して適切な検索クエリを作成する
いくつかのaspページで使用されるクラスで検索機能を構築しています。アイデアは単純で、ユーザーから検索用語を取得し、データベースにアイテムを照会します。現在、私はこれを間違った方法で行っています。これは、SQL インジェクション攻撃に対して脆弱です (そして、何か問題が発生した場合にELMAHがその日を救うためにそこにいます)。
文字列の連結は悪いです。次にわかるのは、Bobby Tablesが私のシステムを破壊することです。これを行う正しい方法は、文字列に :searchterm を入れて次の行を追加することにより、適切な oracle 変数を作成することです。
問題は、like ステートメントを使用しているため、検索語の両側に % を使用できるようにする必要があることです。「%:searchterm%」ではそれができないようです。エラーが発生するだけです。 ORA-01036: 変数名/番号が無効です。
パラメータ化できますが、柔軟な like ステートメントをその一部にすることはできますか?
.net - ODP.NET のデフォルトで OracleCommand.BindByName を強制的に true にする方法はありますか?
System.Data.OracleClientライブラリは廃止されたため、代わりにOracle Data Provider for .NET (ODP.NET)を使用するようにコード ベースを移行中です。私たちが遭遇した問題の 1 つは、System.Data.OracleClient が位置によるバインドではなくパラメーター名のバインドを使用し、すべてのコードが中間データ層を使用するのではなく、 System.Data.OracleClient.OracleCommandに直接アクセスすることです。
かなりの量のコードがあるため、ODP.NET OracleCommand.BindByName を強制的にデフォルトで true にする簡単な方法はありますか?それとも、使用するたびに値を確認して設定する必要がありますか? それに失敗した場合、そのコード行を Visual Studio 2008 に挿入する簡単な方法はありますか?
vb.net - VB.NETを使用したOracleへの一括挿入の最適化を支援
一度に5000レコードのブロックを、次々に挿入しています。コマンドは個別のDLLで作成され、4つの異なるストアドプロシージャのいずれかを呼び出すことができます。これをスピードアップする可能性のある一括挿入方法はありますか?現在、レコードあたり約1.5 MSかかり、これを約.7MSに下げたいと考えています。
ありがとう、
デイブ
.net - System.Data.OracleClient を使用して大規模な BLOB を Oracle 10G に挿入するにはどうすればよいですか?
315K の Gif ファイルを Oracle 10g データベースに挿入しようとしています。ストアドプロシージャを実行すると、「ora-01460: unimplemented or unresonable conversion requested」というエラーが発生するたびに発生します。ストアド プロシージャを使用する場合、32K の制限があるようです。直接挿入を行っている場合、これは当てはまらないことをオンラインで読みましたが、バイト配列の挿入文字列を作成する方法がわかりません。これはサーバー上で実行されるシック クライアントであるため、SQL インジェクション攻撃の心配はありません。
どんな助けでも大歓迎です。参考までに、vb.net のコード。
ありがとう、
デイブ
c# - 大きな CLOB を使用して C# からストアド プロシージャを呼び出す際の問題
これらの問題を抱えたのは私が初めてではなく、以下にいくつかの参考記事をリストしますが、まだ適切な解決策を探しています.
C# Web サービスからストアド プロシージャ (Oracle 10g データベース) を呼び出す必要があります。Web サーバーには Oracle 9i クライアントがインストールされており、Microsoft を使用していますSystem.Data.OracleClient
。
このプロシージャは、XML を CLOB として受け取ります。XML が 4000 バイトを超えたとき(これは通常の使用例です)、次のエラーに遭遇しました。
ORA-01460 - 実装されていない、または不当な変換が要求されました
さらに、ストアド プロシージャを C# から直接呼び出すのではなく、匿名の PL/SQL コードを定義する有望な回避策を見つけました。このコードは OracleCommand として実行されます。XML は文字列リテラルとして埋め込まれ、プロシージャ コールはそのコード内から実行されます。
残念ながら、このアプローチは、XML が 32 KB 程度を超えるとすぐに失敗するようになりました。今回のエラーは、次の PL/SQL コンパイラに起因します。
ORA-06550: 行1、列87: PLS-00172: 文字列リテラルが長すぎます
いくつかの調査の後、2番目のアプローチで問題を解決することは不可能であると結論付けました。
上記の投稿に続いて、次の2つのオプションがあります。
- ODP.NET に切り替えます(Microsoft の廃止された DB クライアントのバグであると想定されているため)
- CLOB をテーブルに挿入し、ストアド プロシージャをそこから読み取るようにします。
(最初の投稿では、一部のクライアントにはバグがあると記載されていましたが、私の (9i) は前述の 10g/11g バージョンの範囲には含まれていません。)
これらの 2 つのオプションしか残っていないことを確認できますか? または、私を助ける別の方法はありますか?
明確にするために: XMLは最終的にどのテーブルにも保存されませんが、XML の内容に基づいていくつかのテーブルにいくつかのレコードを挿入するストアド プロシージャによって処理されます。
2つのオプションに関する私の考慮事項:
- ODP.NET への切り替えは困難です。これまでのところ、システムにアクセスできない Web サーバーに ODP.NET をインストールする必要があり、クライアントにもコードをデプロイする必要があるためです。デプロイメントの一部として ODP.NET をインストールします。
- テーブルを迂回すると、クライアント コードがかなり複雑になり、PL/SQL ルーチンを適応/拡張するデータベースにかなりの労力がかかります。
c# - ORA-06550、PLS-00306; Oracle プロシージャーへのデータ挿入エラー
この問題のトラブルシューティングを試みましたが、役に立ちませんでした。プロシージャ 'INSCRAPP' を含む Oracle パッケージに大量のデータを挿入すると、エラーが発生します。エラーメッセージは、
ORA-06550: 行 1、列 7: PLS-00306: 'INSCRAPP' の呼び出しで引数の数または型が間違っています ORA-06550: 行 1、列 7: PL/SQL: ステートメントは無視されました
C# コードは大きいですが、渡すパラメーターを指定しています。
Oracle Procedure のパラメータは、
OracleType.VarChar が Oracle の VARCHAR2 に正常にマップされることを期待していますが、C# コードでデータ型を正しく設定していないように見えるため、問題が何であるかを理解できなかったので、助けてください。
期待して感謝します。
windows-7 - System.Data.OracleClient に 64 ビット Oracle ドライバーを使用するように指示する方法
System.Data.OracleClient
Win7 x64 ワークステーションで使用する .NET アプリケーションを実行しようとしています。ワークステーションには 32 ビットの Oracle クライアントがインストールされているため、次のエラー メッセージが表示されます。
Oracle クライアント ライブラリをロードしようとすると、BadImageFormatException がスローされました。この問題は、32 ビットの Oracle クライアント コンポーネントがインストールされている状態で 64 ビット モードで実行している場合に発生します。
だから、これは私の試行錯誤の長い旅です:
- Oracle クライアントwin64_11gR2_clientをインストールしようとしました。しかし、セットアップ プロセス中にコメントなしでクラッシュします。
- 別の SO スレッドからの回答に従い、instantclient-basic-windows.x64-11.2.0.2.0を試して抽出し、バイナリを含むフォルダーを Windows PATH 変数に入れました。ただし、(再起動後でも)同じエラーメッセージが表示されます。
- この回答の「別の方法」に従い、ファイルoci.dll、orannzsbb11.dll、およびoraociei11.dllを Web サイト プロジェクトの bin/ フォルダーにコピーしました。それでも同じエラーメッセージです。
- インスタントクライアントからすべてのファイルをそのディレクトリにコピーして再試行しましたが、成功しませんでした。
- ODAC112021Xcopy_x64.zipをインストールし、インストール フォルダーと bin フォルダーを Windows PATH 変数に入れました。失敗。
- 私はこの答えに希望を置き、レジストリのDllPathを確認しました (これは実際には ODP.NET ではなく ODP.NET に関連していると想定されて
System.Data.OracleClient
います)。DllPath が ODAC の正しい x64 インストールを指していることがわかりました。を使用System.Data.OracleClient
すると動作するはずですが、それを使用しているため、まだ失敗しています。 - 私はグーグルでスタックオーバーフローしましたが、すでに参照した投稿以外に何も見つかりませんでした。
- 賢明な SO ユーザーから洞察に満ちたアドバイスを得ることを期待して、この SO の質問を慎重に作成しました。
b_levitt から最初の回答を得た後、次の行を Global.asax at に追加してみました
Application_Start
。C:\OracleProducts\Odac-11.2.0.2.1-x64 は、ODAC 64 ビット xcopy バージョンをインストールした場所です。どちらも成功しません。
関連して、.NET アプリを強制的に 32 ビット モードにしようとしても成功しませんでしたが、それは別のことです。将来を見据えたソリューション、つまり 64 ビットが必要です。
asp.net - ORA-12571: TNS:packet writer failure with ASP.NET
ORA-12571: TNS:packet writer failure
私の開発チームは、Oracle 11g に対して ASP.NET 3.5 および 4.0 を使用して多数のエラーを経験しています。これらのエラーは、いつ発生するかについて一貫性がなく、多数のアプリケーションによって生成されます。この例外は、ランダム ストアド プロシージャ、パケット、およびインライン SQL ステートメントを呼び出すときに発生します。Oracle 11 クライアントが Web サーバーにインストールされます。Microsoft System.Data.OracleClient を使用して Oracle に接続するアプリケーションもあれば、Oracle が提供する .NET コンポーネント (ODP.NET) を使用するアプリケーションもあります。両方のデータ アクセス オブジェクトで同じエラーが発生します。
別の Web サーバー上で実行されているが、同じデータベース サーバーを使用する .NET 以外のアプリケーションが他にもあります。アプリにはそのような問題はありません。私の最初の考えは、Oracle クライアントを使用する Web サーバーで何かが正しく構成されていないということです。
他の誰かがこのエラーを受け取りましたか? それを修正するために何をしましたか?
スタックトレース:
visual-studio-2008 - VS2008でのSSRSOracleClientエラー
私はこれに対する答えを探し回っていますが、これまでのところ、自分に合ったものを見つけることができませんでした。
VS2008内のSSRSレポートでOracleデータベースに接続しようとしていますが、常に次のエラーが発生します。
System.Data.OracleClientには、Oracleクライアントソフトウェアバージョン8.1.7以降が必要です。
構成の問題だと思いますが(システムに11gのクライアントがインストールされています)、理解できないようです。接続文字列も他のマシンで正しく機能するため、正しいように見えます。
oracle - 廃止された System.Data.OracleClient 名前空間クラスを使用するコードを置き換える方法は?
データをデータベースから別のデータベースに変換する「汎用」プログラムを作成しました。構成ファイルを使用して変換を定義します。次のようなコードを使用します。
上記の GetConnectionClassTypeByDatabaseType メソッドは、構成ファイルに応じて「System.Data.OracleClient」のような文字列を返します。
DO STUFF 部分は、次のようなメソッドを呼び出します (これらのメソッドは多数あります)。スキーマからデータベース テーブルの列のプロパティを見つけます。これは、Oracle、SQL サーバーなどがこれらを異なる方法で処理するために必要です。
では、これらのクラスが廃止されたことがビルドで示されている場合、これをどのように修正する必要があるのでしょうか? 私がこれを行ったとき、これは一種の教科書的な解決策であるはずでした (Pro C# 2008 および .NET 3.5 プラットフォーム)。今、私は当惑しています。
よろしくお願いいたします - Matti