問題タブ [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.
asp.net - ASP.netDataReader実行手法
私は初心者です。
DataReaderは順方向のみ読み取り専用で動作し、一度に1つのレコードを読み取ると聞きました。次のコードを実行するとします。
グリッドビューはどのようにすべてのレコードにデータを入力しますか?リーダーは読み取りごとに1行を読み取ることができるため、グリッドビューで表示できるのは最後の行だけだと思いました。
c# - Datareader は最初の結果をスキップします
顧客 ID に基づいてデータベースからさまざまな種類の製品を取得する、かなり複雑な SQL クエリがあります。一意の ID 番号の範囲 (つまり、ID 1000 ~ 1999 は製品の 1 つのタイプ、2000 ~ 2999 は別のタイプ、3000 ~ 3999 はさらに別のタイプ) によって識別される 3 つの異なるタイプの製品をプルします。
c.fldCustomer_ID は、必要なユーザー入力の唯一の部分であり、SQL Server Management Studio Express でデータベースに対してこのクエリを実行すると、問題なく実行されます。ただし、SharePoint 用に C# で記述している Web パーツの using ステートメントでこれをラップすると、本来あるべき最初の行が返されず、null 値が返されます。たとえば、SSMS で 3 つの結果 ('1001'、'2008'、および 3045' など) を取得した場合、データリーダーは 2 つの結果のみを返し、最初の値は null 値 (つまり、'null'、'2008') 、」および「3045」)。C# での私のコードは次のとおりです。
SQL プロファイラーは、使用されているリテラルとパラメーターを除いて、SSMS を介して行われたか Web パーツから行われたかに関係なく、同じクエリが渡されることを示しています。また、パラメーターをリテラルに変更すると、同じ結果になります。C# が SSMS とは対照的に SQL クエリを処理する方法に矛盾がありますか、それとも何らかの方法で間違って実装したのでしょうか?
完全を期すために、リーダーからドロップダウンリストにデータをプルするためのコードを次に示します。
私は完全に困惑しており、私が得ることができるどんな助けにも本当に感謝しています.
c# - DataReaderが空になると?
私は以下のコードを持っています:
このコードブロックが正常に実行されると、データリーダー(リーダー)は空になりますか?理由は何ですか?後でこのリーダーで作業する必要があります。解決策は何ですか?
c# - Oracle DataReader は 1 行を返しますが、Read メソッドは false を返します
ユーザーを検索して 1 つのレコードを返す基本的な sql ステートメントがありますが、if(myReader.Read()) というコード ブロックを実行すると、false が返されます。コードをステップ実行してリーダー オブジェクトを調べたところ、実際には 1 つのレコードが含まれています。以下はコードです。
SQL: SELECT user_name, user_password, user_state FROM users WHERE users.user_id = 123
c# - NpgSQLdataReaderGetOrdinalが例外をスローします。
プロジェクトのDALで通常使用する一連のメソッド用にNpgSQLのラッパーを作成しました。それらのうちの2つは、通常、DataReaderから直接DTOを入力するために使用します。通常、フィルヘルパーメソッドでは、DTOをインスタンス化し、Datareaderのデータを対応するプロパティにマッピングするプロパティを反復処理します。ほとんどの場合、fillメソッドが生成されます。
プロパティの多くをnullにするか、DTOのデフォルト値を使用することを許可しているため、プロパティを入力する前に、dataReaderのデータがプロパティに対して有効かどうかを確認するメソッドを使用しました。したがって、IsValidString( "fieldname")メソッドとDRGetString( "fieldname")メソッドを次のように使用します。
私のfillメソッドは、クエリを実行したメソッドに遅延し、次のようになります。
これは、2.02より前のNpgSQLでは正常に機能していました。。GetOrdinalメソッドが呼び出されたときに、フィールドがdataReaderに存在しなかった場合は、単に-1が返されます。IsValidString()でfalseを返し、次のプロパティにスキップするのは簡単です。存在しないフィールドをチェックすることによるパフォーマンスのヒットは、事実上無視できました。
残念ながら、NpgSQLを変更すると、フィールドが存在しない場合にGetOrdinalが例外をスローします。コードをtry/catchでラップし、catch内でfalseをスローするという簡単な回避策があります。しかし、特にデバッグモードに入ると、パフォーマンスの低下を感じることができます。長いリストへの記入には数分かかります。
おそらく、NpgSQLには、このメソッドの後方互換性をサポートするために接続文字列(互換性)に追加できるパラメーターがありますが、それが正しく機能することはありません(接続文字列の形式が正しくないため、常に例外が発生します)。とにかく、私はより良い回避策のための提案を探しています。データリーダーからオブジェクトを入力する、または何らかの方法で例外の問題を回避するためのより良い方法はありますか?
c# - C# で DBNull を処理する
これを行うためのより良い/よりクリーンな方法はありますか?
mysql - vb.netデータリーダーの複数のテーブルから読み取る
私はmysqlの2つのテーブルから読み取ろうとしています:
-しかし、私はこのエラーを受け取ります:
コード全体は次のとおりです。
-この問題の解決に役立つ提案はありますか?または、データリーダーを使用して2つのテーブルからデータを読み取るという目標を達成するための他の手法もありますか?
これはWinFormであり、Webフォームではありません
database - DataReader でデータベース レコードを読み取り、それを DataTable に追加する方法
ADO.NETを使用してMSSQLデータベースに変換して保存したいOracleデータベーステーブル(約400万レコード)にいくつかのデータがあります。これまでのところ、(はるかに小さなテーブルの場合) DataAdapter を使用して Oracle データベースからデータを読み取り、さらに処理するために DataTable を DataSet に追加しました。
巨大なテーブルでこれを試したところ、メモリ不足の例外がスローされました。(これは、テーブル全体をメモリにロードできないためだと思います):)
現在、テーブル全体をメモリに保存せずに、この抽出/転送/ロードを実行する良い方法を探しています。DataReader を使用して、DataTable 内の単一の dataRecords を読み取りたいと思います。約10万行ある場合は、それらを処理し、後でDataTableをクリアしたいと思います(メモリを再び解放するため)。
ここで、ado.net を使用して単一の datarecord を行として dataTable に追加する方法と、dataTable をメモリから完全にクリアする方法を知りたいと思います: これまでの私のコード:
ご回答ありがとうございました!
.net - DataReader に奇妙な問題がありますか?
DataReader で奇妙な問題に直面しています。レガシー rdbms システムで OdbcClient を使用しています。
次のコマンドをデータベースに送信しています。
ただし、特定のケースでは、以下に示すように DataReader を介して反復処理を行います。
データベースの Col2 列に値があるにもかかわらず、Col2 値を DBNull として取得します。Col1 と Col3 の値を正しく取得しています。この動作の考えられる理由は何ですか?
更新: cmd.ExecuteQuery() を呼び出す前に cmd.Prepare() を呼び出すと、これは修正されます。誰でもこの動作を説明できますか?
c# - 接続を閉じる前にリーダーを閉じる
接続を閉じる前に常に DataReader を閉じる必要がありますか、それとも単に接続を閉じても問題ありませんか? 接続を閉じるだけで、効果的にリーダーを閉じますか?
(これは c#.net 3.5 用です)
ありがとう!