0

C# で ODBCdataadapter を使用して、準備段階として一部のデータを一時テーブルに選択する必要があるクエリを実行しようとしています。ただし、この最初の選択ステートメントによりクエリが終了し、データが一時テーブルに入れられますが、2番目のクエリを実行してデータを取得することはできません。問題は、1 つの dataadapter クエリに 2 つの select ステートメントが存在することだと判断しました。つまり、次のコードは最初の選択のみを実行します。

select 1
select whatever from wherever

SQL Server Management Studio から直接クエリを実行すると、問題なく動作します。以前にこの種の問題に遭遇した人はいますか? 同じ C# コード (接続文字列のみが異なる) を使用して、同様のデータベースでまったく同じクエリを以前に試しましたが、問題はありませんでした。

質問する前に、一時テーブルが役に立ちます。そうしないと、内部の select ステートメントを大量に実行して、データベースを停止させるからです。

4

3 に答える 3

2

コマンド タイプが CommandText である Command を実行していると仮定すると;、ステートメントを区切るために が必要です。

select 1;

select whatever from wherever;

可能であれば、ストアド プロシージャの使用を検討することもできます。また、ODBC クライアントの代わりにSQL クライアントオブジェクトを使用する必要があります。そうすれば、他の方法では利用できない追加の方法を利用できます。パフォーマンスも向上するはずです。

複数のデータベースをサポートする必要がある場合は、DataAdapter クラスを使用し、Factory を使用して具体的な型を作成できます。これにより、特定のバックエンドに縛られることなく、ネイティブ ドライバーを使用できるという利点が得られます。通常、複数のバックエンドをサポートする ORMS はこれを行います。Enterprise Library Data Access Application Block は、ORM ではありませんが、これも行います。

于 2011-02-15T06:20:44.037 に答える
0

残念ながら、私の組織はデータ ウェアハウスに情報を抽出するためだけに契約しているため、DB への書き込みアクセス権はありません。このプログラムは、複数のシステムで使用できるように一般化されているため、ODBC を採用しました。SQL Management Objects を使用してそれを書き直すことは、それほどひどいことではないと思います。

于 2011-02-15T14:35:28.687 に答える