問題タブ [datareader]
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.
.net - DataReader で使用すると出力パラメーターが読み取れない
オブジェクトを使用して、DataReader
ストアド プロシージャを介してデータベース (SQL Server など) からデータにアクセスする場合、実行前に Command オブジェクトに追加された出力パラメータは、読み取り後に入力されません。行データとすべての入力パラメーターを問題なく読み取ることができますが、出力パラメーターは読み取れません。
.net - .NET DataTable が Load(DataReader) で行をスキップする
以下を使用して、LocalReport を作成するために、DataTable にデータを入力しようとしています。
ある時点で、レポートが不完全で、1 つのレコードが欠落していることに気付きました。クエリが正確に 2 行を返すように、いくつかの条件を変更しました...驚き: レポートには 2 行ではなく 1 行しか表示されません。問題がどこにあるかを見つけるためにデバッグしようとしましたが、行き詰まりました
DataReader
に 2 つのレコードがDataTable
含まれているのに 1 つしか含まれていないことに気付いたとき。偶然、ORDER BY
クエリに句を追加したところ、今度はレポートが正しく表示されていることに気付きました。
どうやら、DataReader には 2 つの行が含まれていますが、DataTable は、SQL クエリ文字列に が含まれている場合にのみ両方を読み取りますORDER BY
(それ以外の場合は、最後の行のみを読み取ります)。なぜこれが起こっているのか、どうすれば修正できるのか、誰でも説明できますか?
編集:
最初に質問を投稿したとき、最初の行をスキップしていると言いました。後で、実際には最後の行しか読み取っていないことに気付き、それに応じてテキストを編集しました (当時、すべてのレコードが 2 つの行にグループ化されていて、実際には最後の行しか表示されていないときに最初のレコードをスキップしているように見えました)。これは、MySQL によって返された行を区別するための一意の識別子がなかったため、ORDER BY
ステートメントを追加すると、各行に一意の識別子が作成されたことが原因である可能性があります。
これは単なる理論であり、私はそれを支持するものは何もありませんが、私のテストはすべて同じ結果につながるようです.
dispose - SqlDataReader: このシナリオでは、リーダーは閉じられますか?
継承した古い .NET 1.1 プロジェクトの DataReaders をクリーンアップしています。
以前の開発者は、ほとんどの DAL メソッドが SqlDataReaders を返すような方法でデータ アクセス レイヤーをコーディングしました (したがって、.Close() メソッドまたは .Dispose() メソッドを適切に呼び出すのは呼び出し元に任されていました)。
ただし、呼び出し元が返された SqlDataReader をキャッチしていない (したがって、適切に破棄していない) 状況に遭遇しました。以下のコードを参照してください。
データ アクセス方法:
呼び出しコード:
ご覧のとおり、呼び出し元のメソッドは、返された SqlDataReader を受信/キャッチしません。それでどうなるの?その SqlDataReader はまだそこにあり、開いていますか? それとも、何も対処されていないため、自動的にガベージコレクションが行われますか?
これをデバッグしてテストする方法が思いつきませんでした。誰かに素晴らしいアイデアや提案があれば。
c# - SQLDataReaderにループ内の行がありません
次のコードを実行すると、1行が省略されます。files.Countを実行すると、4行あると表示されますが、4行目のデータは保存されていません。SQL Manager内からストアドプロシージャを実行すると、4行すべてとすべてのデータが返されます。何か助けはありますか?
c# - System.Data.IDataReader でメソッド GetValues() をモックするにはどうすればよいですか?
System.Data.IDataReader でメソッド GetValues() をモックするにはどうすればよいですか?
このメソッドは、渡されたオブジェクトの配列を変更するため、単純にモック値を返すことはできません。
.net - データテーブルにデータを入力するとき、データリーダーはデータセットよりも高速ですか?
どちらが速いでしょう。
1)データリーダーをループし、入力されたデータテーブルに基づいてカスタムの行と列を作成する
2)または、dataAdapterオブジェクトを作成し、データテーブルを(.Fill)だけ入力します。
データテーブルを動的に作成しても、データリーダーのパフォーマンスは維持されますか?
c# - Datareader は VS で結果を返さないが、ストアド プロシージャは SQL Server で複数の結果セットを返す
Visual Studio 2008 でデータリーダーから結果を取得できません。同じデータベースに複数の Proc が保存されています。入力パラメータを受け取っていないものから値を取得できます。ただし、入力パラメーターを使用してストアド プロシージャで executreReader() メソッドを使用すると、空のデータリーダーが取得されます。結果コレクションを調べると、「IEnumerable が結果を返しませんでした」というメッセージが表示されます。SQLサーバー内でストアドプロシージャを実行して結果セットを返すことができるので、私は困惑しています。以前は、Visual Studio 内でこれらのストアド プロシージャから行を取得できましたが、ある日、機能しなくなったようです。
dataadapter を使用してデータセットに結果を入力し、executereader() メソッドを使用して sqldatareader を取得しようとしましたが、まだ結果が得られません。例外もスローされません。私のパラメーターはすべて適切に命名されていますが、これらのストアド プロシージャをパラメーターなしで呼び出して、フィルター処理されていない結果セットを返すことができるはずです。現在使用しているコードは次のとおりです。
助けてください!
.net - DataReader の列の存在を確認するか、特定の例外でデバッガーを中断させません
次のようなコードがあります。
統合された列がデータリーダーに存在するかどうかわからないので、それを確認します。それは正常に動作します(ただし、少しハックです)。
ただし、デバッガーをアタッチすると、例外がスローされるたびに中断します。非常に迷惑です。
そのコードを書くためのより良い方法はありますか; または、例外を無視して中断しないように指示するVisual Studioの方法があります(ただし、ここだけで、どこでもではありません)。
c# - Sqlite DB を読み取る OdbcDataReader からの奇妙な結果
このメソッドはいくつかの奇妙な結果を返します。なぜこれが起こっているのか、そしておそらく私の望ましい結果を得るための解決策を誰かが説明できるかどうか疑問に思っていました.
結果:
FileName = 私が期待するもの
FileSize = 私が期待するもの
バッファ = すべてのバイト = 0
BytesRead = 0
BlobString = バイナリ データの文字列
FieldType = BLOB (私が期待するもの)
ColumnType = System.String
さらに、ファイルが数 KB より大きい場合、リーダーは StringBuilder の容量引数が 0 より大きくなければならないことを示す例外をスローします (おそらくサイズが Int32.MaxValue より大きいため)。
私の質問は、OdbcDataReader から大きな BLOB を適切に読み取る方法だと思いますか?
c# - 「パラメーターの数が、ストアド プロシージャの値の数と一致しません」System.Data.Common.DbCommand ニュアンス
これは、SQL Server データベースのセットアップの問題である可能性がありますが、どこから調べればよいかわかりません。
私はストアドプロシージャを持っています:
ストアド プロシージャを呼び出す C# コードは次のとおりです。
C# コードは運用環境で正常に動作します。ここでは、dteSinceは入力パラメーターとして指定されていないため、null に設定されます。
問題は、これをUAT環境で実行すると、タイトルに示されているメッセージが返されることです -パラメーターの数が間違っています...
コードを次のように変更することで、これを修正できます。
この修正は、ある環境ではコードが失敗し、別の環境では問題なく動作するという実際の問題を覆い隠すだけです。
ストアド プロシージャを削除して再作成しましたが、うまくいきませんでした。
テクノロジは、C# 2.0 および Sql Server 2005 を使用しました。