問題タブ [sqldatareader]
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.
c# - C# で SqlDataReader を使用して行数を取得する方法
私の質問はSqlDataReader
、C# を使用してクエリによって返される行数を取得する方法です。Read()
これについていくつかの回答を見てきましたが、メソッドでwhileループを実行してカウンターをインクリメントすることを述べているものを除いて、明確に定義されたものはありませんでした。
私の問題は、最初の行が列ヘッダー名であり、その後のすべての行が行データになるように多次元配列を埋めようとしていることです。
List コントロールにデータをダンプするだけでよいことはわかっていますが、それについて心配する必要はありませんが、自分自身の教育のために、さまざまな形式で選択して表示するときに、配列にデータを出し入れしたいと考えています。
したがって、行の量と列データを取得するには、開いてから再度開くRead()
必要があるため、++の方法を実行してからインクリメントすることはできないと思います。Read()
Read()
私が話していることのほんの一例です:
次に、列を通過してポップする for ループ
c# - n 層レイヤー全体で SqlDataReader を開いたままにする
SqlCommand の ExecuteNonQuery() と ExecuteReader() を抽象化する Database クラスがあります。ブロックを使用して Sqlconnection と SqlCommand をラップするため、CustomExecuteReader() が呼び出された後に SqlDataReader が閉じられるため、ビジネス レベル レイヤーで SqlReaderResultSet を読み取ることができません。以下のコード。フィードバックをありがとう。
c# - ADO.Net DataReader のタイムアウトの問題
ADO.Net + C# + VSTS 2008 + ADO.Net を使用して SQL Server 2008 Enterprise に接続しています。ここで説明したほぼ同じパターン/サンプルを使用しています。ADO.Net DataReader を使用して、1 つのエントリ (行) ごとにデータを取得します。
http://msdn.microsoft.com/en-us/library/haa3afyz.aspx
私の質問は、このサンプルで SqlCommand タイムアウトを設定した場合、1 です。タイムアウトは、エントリごとのデータ全体の合計タイムアウトではなく、1 つの特定の行を取得するために最大値として使用できる時間に適用されると思いますループ?
ところで:ループつまり、
2. このタイムアウトは、データベースからデータ エントリを取得するのにかかる時間のみが重要であり、このタイムアウトは、各エントリを処理する時間とは何の関係もありません (たとえば、タイムアウトを 20 秒に設定し、1 秒かかる場合)データベースから 1 つのデータ エントリを取得するのに 1 秒かかり、アプリケーション ロジックがデータ エントリを操作するのに 30 秒かかります。タイムアウトは発生しません)。
正しい理解?
.net - SqlDataReader.Read()は常にfalseを返します
私は次の状況にあります:
したがって、reader
有効な結果が含まれている場合はHasRows == true
、reader.Read()
trueを返す必要がありますか?
まあ、それは私には向いていません。Hydrate(out entity, reader);
ラインがヒットすることはないので、何が起こっているのかわかりません。
誰かが私がこれを理解するのを手伝ってくれますか?
ありがとうございました!
c# - リーダーに結果は返されませんが、SQL Management Studio を介して同じクエリが機能します
一部の全文検索クエリ、特に複数の単語を含むクエリで奇妙な動作が発生しています。これらは、Management Studio を介して実行すると正常に動作しますが、コードから呼び出すと結果が返されません。アプリからどのコマンドが送信されているかを確認するために SQL トレースを実行しました。Management Studio から実行するとまったく同じコマンドが結果として返されますが、ExecuteReader メソッドを使用してアプリから呼び出された場合は結果が返されません。
この呼び出し:
このコマンドを実行すると、アプリと Management Studio の両方のデータが返されます。
Management Studio から実行された場合にのみデータを返します。これらのクエリをトレース ログから直接コピーして貼り付けました。
コード側では、Enterprise Library を使用していますが、全体的な DB 呼び出しは非常に単純です。
2 番目のケースでは、何らかの理由で dataReader.HasRows が false ですが、Management Studio からこれらのクエリを実行すると、両方ともデータが返されます。
返された行の数が原因である可能性があると思いましたが (2 番目のクエリははるかに大きな結果セットを返します)、さらに多くの行が返された単一単語検索のテストに成功しました。
DataReader が単純な Management Studio クエリの実行とは異なる動作をする理由を理解していただければ幸いです。
ありがとう、
アントニン
sqldatareader - IDatareader を実装するリーダーよりも SQLDataReader を使用する利点は?
SQL Server >= 2005 を使用している場合、IDatareader を実装するだけのリーダーとは対照的に、SQLDataReader を使用する利点は何ですか?
SQLDatareader には選択できる機能が増えているだけですか、それとも SQLDatareader を使用するとパフォーマンスが向上しますか?
これについて説明している記事を歓迎します。
ありがとう!
クリス
c# - 最初に閉じる必要があるこのコマンドに関連付けられた DataReader
次のエラーが表示されます。
「このコマンドに関連付けられた開いている DataReader が既に存在します。これを最初に閉じる必要があります。」
foreach ループでリーダーを使用したためですか? または何が問題なのですか?よろしくBK
asp.net - VB.net / C# はクライアント部分で sqlreader を参照しません。
5 つのテキスト ボックスがあるフォームがあり、データベースからデータを取得して、その 5 つのテキスト ボックスにそのデータを設定する必要があるとします。
したがって、3 つの基本レイヤーがあるとします。
default.aspx ページの分離コード
DAL に接続する BLL クラス
およびデータ アクセス レイヤー (DAL)
しかし、default.aspx ページは sqldatareader について認識してはならないということを聞いて読んだことがあります。実際には、おそらく sqlclient 名前空間を default.aspx 分離コード ページに追加したくないでしょう。
だから私はこのようなことをしていました:
次に、BLL は単純に DAL を呼び出して SQL Server のストアド プロシージャを呼び出し、CommandObject.ExecuteReader を実行し、結果を取得して BLL に戻し、BLL はそれを default.aspx のコード ビハインド ページに送信します。
それが意味をなさない場合は、完全なソース コードを提供できます。私の質問は、default.aspx が実際に SQL データ リーダーを宣言して認識していることが悪い場合、これを行うためのより良い方法は何ですか? インターフェイス コードに sqldatareader が含まれないようにするには、どのデータ型を使用する必要がありますか?
vb.net - FlexGrid でデータを埋めるための DataTable と SqlDataReader の間のパフォーマンスの問題
VB.NET でデータを FlexGrid に入力しようとしているときに、DataTable と SqlDataReader のどちらがより高速ですか?
c# - SqlDataReader、ファイアホースカーソル-バッファリングなし?
したがって、SqlDataReaderは非常に高速であり、取得する行数がわからず、一度に各行にメモリを割り当てるだけであることを理解しています。したがって、100万行の小さな行(たとえば4〜32バイト)がある場合、読み取られる各行はサーバーへのラウンドトリップを意味しますか?バッファリングは正しく行われませんか?
SQL Native Clientを介してODBCを使用した場合、ラウンドトリップごとに512行をフェッチするように適切な大きさの行バッファーを設定できます。コンシューマーが行0を読み取ると、512行のフェッチを実行してから行0を返します。次の511回の読み取りはメモリアクセスであり、513回目の読み取りは新しいラウンドトリップです。
私にとって、これはより高速である必要があります(そして、転送のみである必要はありません)が、結果セットがサーバー上でどのように具体化されるかにも依存します。後者の場合、ネットワーク経由でフェッチを開始する前に結果セットを終了する必要がありますが、使用していると思われるSqlDataReaderおよびTDS(私がよく知らないプロトコル)の場合はそうではない場合があります。コメントをいただければ幸いです。