問題タブ [dbdatareader]
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#DbDataReaderを使用して結果のバッチをループするのに最適な方法
いくつかのSQLクエリをバッチとして実行してから、すべての結果セットをバッチに戻しています。私のコードが現在まとめられている方法では、最初の結果セットはスキップされます。これがわかったので、ループの外に最初の結果を取得する別のステートメントを挿入するだけで済みますが、この問題に対してより洗練された解決策があるかどうか疑問に思っています。
これが何が起こっているかのsudoコードです:
これで、NextResult()を最初に呼び出したときに、最初の結果に進むことが期待されていました。これは、Read()が実行しているように見えます。ただし、実際に行われているように見えるのは、最初の呼び出しで2番目の結果に到達することです。私はあなたがこの方法をどのように使用することが期待されているかを誤解していますか、それともあなたは本当に次のようなことをすることが期待されていますか?
これは私を腐ったプログラミングスタイルだと思いますが、それを回避する方法はわかりません。誰かがこれに対するよりエレガントな解決策を知っていますか?
c# - ToList を使用した後の「行/列のデータが存在しません」という例外
DbDataReader を IEnumerable オブジェクトに変換する拡張メソッドがあります。
私のアプリケーションでは、次のようにデータベースにクエリを実行します。
その後、各レコードを列挙し、WRKORDNBR フィールドの値を取得します。
これは以前はうまくいきました。ここで、わざわざ DbDataReader を変換した理由は、foreach ブロックの前にレコードに対して LINQ クエリを実行する必要があるためです。ご存知のように、DbDataReader のレコードは 1 回しか列挙できません (または、完全に何かが欠けているのでしょうか)。つまり、AsEnumerable の結果を List にコピーして、複数回列挙できるようにする必要があります。
少なくとも、それが私がしなければならないことだと思いました。しかし、 foreach ループを変更して一時コレクションを反復処理すると、次のようになります。
InvalidOperationException: 行/列にデータが存在しません
ここで何が欠けていますか?
sql - SqlDataReader / DbDataReader の実装に関する質問
DbDataReaders が実際にどのように機能するかを知っている人はいますか? 例として SqlDataReader を使用できます。
次のことをすると
データ リーダーはすべての行をメモリ内に持っていますか、それとも 1 つだけを取得し、Read が呼び出されると、データベースに移動して次の行を取得しますか? 1 つだけメモリに取り込むとパフォーマンスが低下するようですが、すべてを取り込むと ExecuteReader の呼び出しに時間がかかります。
私はオブジェクトの消費者であることを知っており、彼らがそれをどのように実装するかは問題ではありませんが、私はただ興味があります.Reflectorが何をしているのかを知るために、Reflectorで数時間過ごすことになると思います.と思ったので、詳しい方にお聞きしたいと思います。
誰かがアイデアを持っているかどうか、私はただ興味があります。
.net - ADO.Net-複数のDBDataReaderを同時に実行していますか?
DBDataReaders
同時に複数の読み取りデータがある場合、次のエラーが発生します。
設定でConnectionPoolingを有効にしているので、このエラーが発生する理由がわかりません。私の現在の接続はすでに使用されているので、新しい接続を作成することを想定していませんか?
trueに設定MultipleActiveResultSets
すると問題が解決することはわかっていますが、問題が存在する理由を理解しようとしています。
c# - DataTable に DataReader をロードするときに制約例外を取得する
次の c# コードを使用して、マージからの出力を返す SQL2008 データベースに対してマージ クエリを実行します。
最後の行でエラーがスローされます。
System.Data.ConstraintException - 制約を有効にできませんでした。1 つ以上の行に、null 以外、一意、または外部キーの制約に違反する値が含まれています。
これは MSDN で見つけたもので、私のシナリオには合っていますが、実際にこれを修正するにはどうすればよいでしょうか?
で主キーをクリアしてdt.PrimaryKey=null;
も機能しない
上記のコードは、多くのテーブルで使用されます。
c# - DbDataReader を反復する前に DbCommand を破棄しても問題ありませんか
データベース スキーマ情報を取得するために特定のクエリを実行する必要がある単純なアプリケーションがあります。クエリを実行してリーダーを返す簡単なメソッドを作成しました。次のようなものです-
呼び出しコードは接続を閉じ、リーダーと接続を適切に破棄します。
私の質問 - リーダーを反復する前に、(using ブロックを介して行われるように) コマンド インスタンスを破棄することは問題ありませんか? リーダーを閉じた後に OUT パラメータが入力されるとは思いません。ADO.NET API には、これに関する厳密なガイドラインはありますか?
c# - DbDataReader エラー: リーダーが閉じているときに Read を呼び出す試みは無効です
こんにちは、メソッドから DataReader を返そうとしていますが、閉じられた DbDataReader オブジェクトが返されます。この問題を解決するためのアイデア。コードを改善するための提案をお待ちしています。
ありがとう
更新 データベース接続を開いたままにしたくありません。接続を閉じた後に開いている DataReader を返す方法はありますか。
sql - Entity FrameworkでDbDataReaderオブジェクトを直接取得するにはどうすればよいですか?
MSDN(http://msdn.microsoft.com/en-us/library/dd487208.aspx)によると、EntityFrameworkDbDataReader
でSQLクエリを実行する過程で作成されるというオブジェクトがあります。
DbDataReader
Entity Frameworkは、をエンティティクラスに「変換」します。
DbDataReaderに直接アクセスするにはどうすればよいですか?
asp.net - トラフィックの多いシナリオでDapper.Netを使用しているときにDataReaderの問題を開きます-今すぐ解決しますか?
Dapper.Netを使用したDALでのデータ呼び出しの例を次に示します。
私たちが見ている一貫したエラーは次のとおりです。
2012-06-20 11:42:44.8903|致命的|このコマンドに関連付けられた開いているDataReaderがすでにあり、最初に閉じる必要があります。| System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)at System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method、SqlCommand command)at System.Data.SqlClient.SqlCommand.ValidateCommand(String method、Boolean async)at System .Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String method、DbAsyncResult result)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String method) Data.SqlClient.SqlCommand.ExecuteReader(CommandBehaviorの動作、
MyApp.DAL.DapperORM.SqlMapper.d_ 131.MoveNext() in C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs:line 581 at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)at MyApp.DAL.DapperORM.SqlMapper.Query [T](IDbConnection cnn、String sql、Object param、IDbTransaction transaction、Boolean buffered、Nullable1 commandTimeout, Nullable
1 commandType)in C:\ Projects \ Git \ MyApp \ MyApp.DAL \ MyApp.DAL.MyAppPrimary.Repositories \ Dapper \ SqlMapper.cs:line 538 at MyApp.DAL.Repositories.MemberRepository.AddNotificationEntry(NewsfeedNotification NotificationEntry)in C: \ Projects \ Git \ MyApp \ MyApp.DAL \ MyApp.DAL.MyAppPrimary.Repositories \ MemberRepositories \ MemberRepository.cs:line 465 2012-06-20 11:42:45.2491|致命的|リーダーが閉じているときにReadを呼び出そうとしません。 || System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)で
System.Data.SqlClient.SqlDataReader.Read()at MyApp.DAL.DapperORM.SqlMapper.d _131.MoveNext() in C:\Projects\Git\MyApp\MyApp.DAL\MyApp.DAL.MyAppPrimary.Repositories\Dapper\SqlMapper.cs:line 597 at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)at MyApp.DAL.DapperORM.SqlMapper.Query [T](IDbConnection cnn、String sql、Object param、IDbTransaction transaction、Boolean buffered、Nullable1 commandTimeout, Nullable
1 commandType)in C:\ Projects \ Git \ MyApp \ MyApp.DAL \ MyApp.DAL.MyAppPrimary.Repositories \ Dapper \ SqlMapper.cs:line 538atMyApp.DAL。 DapperORM.SqlMapper.Query(IDbConnection cnn、String sql、Object param、IDbTransaction transaction、Boolean buffered、Nullable1 commandTimeout, Nullable
1 commandType)in C:\ Projects \ Git \ MyApp \ MyApp.DAL \ MyApp.DAL.MyAppPrimary.Repositories \ Dapper \ SqlMapper.cs:line 518 at MyApp.DAL.Repositories.MemberRepository.GetBuddies(Int32 profileID)in C: \ Projects \ Git \ MyApp \ MyApp.DAL \ MyApp.DAL.MyAppPrimary.Repositories \ MemberRepositories \ MemberRepository.cs:line 271 2012-06-20 11:43:01.2392|致命的|シーケンスに要素が含まれていません| System.Linq.Enumerable.First [TSource](IEnumerable`1 source)at MyApp.DAL.Repositories.MemberRepository.GetNickname(Int32 profileID)in C:\ Projects \ Git \ MyApp \ MyApp.DAL \ MyApp.DAL.MyAppPrimary .Repositories \ MemberRepositories \ MemberRepository.cs:line 337
最初は、の中に返品がありusing {...}
、ブロックの外に移動しましたusing
が、それでも同じ問題が発生します。
これはトラフィックの多いアプリケーションであるため、テストでは、この問題は実際に公開されるまで実際には発生しませんでした。
Dapperを使用したDataReader管理のために、ここで実行する必要がある他の何かがありますか?
- - - アップデート - - -
以前にこれを投稿する必要がありましたが、今これを追加するだけです。
Dapper.Netの581行目には、次のExecuteReader()
コードが含まれています。
...ネストされたusing
コードに表示されますか?yield return (T)next;
while内、ネスト内のコードが原因で問題が発生しているのではないかとusing
思います。
重要なのは、適度な量のトラフィックでは、Dapperは問題なく動作しているように見えるということです。ただし、1秒あたり約1000リクエストのシステムでは、トリップするようです。
これはDapper開発者にとってはFYIであり、彼らがこれを解決できるかどうか疑問に思っていると思います。
(そして、コードでDapperORMという名前を間違えたことに気づきました-それはORMではありません)