問題タブ [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# - ReSharper は SqlDataReader で警告を表示します
私がこのようなものを書くとき:
ReSharper は で警告を表示しreader.Read()
、リーダーが である可能性があることを伝えますnull
。
しかし、どのような場合に null になるのでしょうか? 私が知っているように、コマンドが何も返さない場合、リーダーはnullではなく、何もありません。
c# - SqlDataReaderから列のテーブル名を取得する方法
構成ファイルから取得したSQLクエリがあります。このクエリには通常、3〜6個の結合が含まれています。
実行時に、SqlDataReaderで表される結果セットに基づいて、各列のテーブルの名前を見つける必要があります。
動作しないものがいくつかあります:
- SqlDataReader.GetNameは列名を返しますが、テーブル名は返しません。
- SqlDataReader.GetSchemaTableは、列情報を含むデータテーブルを返しますが、すべてのテーブル名はnullです。
- 現在のクエリの結果に関するデータが必要なため、information_schemaのクエリは役に立ちません(列名は一意ではありません。異なるテーブルに同じ名前の列があります)。
コンソールアプリケーションで.net3.5SP1/ C#/ SQLServer2008を使用しています。
編集:「列」は複数のテーブル、関数、さらには定数式から組み合わせることができるため、これがすべての場合に可能であるとは限りません。単純な場合に機能するものを探しています。
編集2:それが機能しなかった理由を見つけました-SqlDataReader.GetSchemaTableを使用してテーブル情報を取得できますが、CommandBehaviorをKeyInfoに設定する必要があります。これは、ExecuteReader呼び出しで行います。
asp.net - 特定の数のレコードが返されると、SqlHelper.ExecuteReader の結果がさまざまで予期しないものになる
注:何が問題なのかを知るためにすべてを読む必要はないかもしれません...必要に応じて、3 つのシナリオに関する部分までスキップしてください。これを実装しようとした方法とエラーが発生した場所に関する背景情報が必要な場合にのみ、最初をお読みください。
まず、特定の のテーブルにClients
格納されている のリストを取得しようとしています。CRM_Clients
callerId
メソッドを使用して、コントローラーからクライアントを取得しますSelectLiveClientsForCaller
。次に、メッセージはstatic Instance
DataProvider クラスのメソッドを介して DAL に渡されます。
私DataProvider
のクラスは、利用可能なすべてのメソッドの概要を説明する抽象クラスSqlDataProvider
です。
サブクラスSqlDataProvider
では、SelectLiveClientsForCaller
メソッドが実際に処理SqlHelper.ExecuteReader
され、ストアド プロシージャが呼び出されますCRM_Clients_SelectLiveForCaller
。
最後に、ストアド プロシージャCRM_Clients_SelectLiveForCaller
指定された の削除されていないすべてのクライアントを返しますcallerid
。
これにより、行が戻ってコントローラーから結果が返されます...
私がこれまでに気づいた3つのシナリオがあります
ストアド プロシージャ (SQL Server mgmt studio を介して実行) からレコードが返されない場合、一連のメソッドを呼び出すと
reader.Read()
false が返され、完全にスキップされます。ストアド プロシージャから返されたレコードが 1 つある場合 (SQL Server mgmt studio を介して実行)、一連のメソッドを呼び出すとtrue
reader.Read()
が返されますが、結果を列挙すると、IEnumerable が結果を返さなかったことを示すメッセージが表示されます。ストアド プロシージャから返されるレコードが 2 つある場合 (SQL Server mgmt studio を介して実行)、一連のメソッドを呼び出すとtrue
reader.Read()
が返されますが、結果を列挙すると 2 つではなく 1 つのレコードしか返されません。
各シナリオでこれらの結果が得られる理由を誰か説明できますか?
さらに情報が必要な場合はお問い合わせください。できるだけ早くこれを更新します。
ありがとう、
マット
c# - SqlDataReaderからNullable型を返すC#パフォーマンスの向上
組み込みのGetInt32ではなく、DataReaderからNullableInt32を返す単純なメソッドがあります。
私はこのメソッドを何度も呼び出していますが、いつでもそれを削ることができるという状況が1つあります。
DataReaderからnull許容のInt32を取得するための代替のより高速な方法を誰かが提案できますか?
c# - DataReader を使用した DB 問題からの SQL 読み取り
大学のスタッフの詳細を含むユーザー (tblUsers) のテーブルがあります。選択したモジュールに関連付けられている講師の名前をテキスト ボックスに入力しようとしています。
特定のモジュールに関連付けられているすべての UserID を取得して、ユーザーが講師であるかどうかをテストしています。講師である場合は、ID を ArrayList に追加します。
次に、この配列を反復処理し、現在の ID を通過する各反復中に以下のメソッドを呼び出します。
ただし、以下のメソッドを見ると、私は SqlDataReader を使用しており、次の行で読み取り中にエラーが発生しています。
txtLecturerName.Text += myReader["First_Name"].ToString();
エラー メッセージ: 'myReader["First_Name"]' が 'System.IndexOutOfRangeException' 型の例外をスローしました
私が使用しているテーブル レイアウトは、メソッド コードの下にあります。これについての助けがあれば大歓迎です。私は一杯のコーヒーで頭を画面から遠ざけることができます。
tblUsers:
c# - 1つのメソッドから複数のタイプのビジネスオブジェクトを入力するにはどうすればよいですか?
4つの異なるBusinessオブジェクトがあり、それぞれが対応するFillBusinessObjectメソッドを呼び出して、個々のオブジェクトのすべてのプロパティを1つずつ入力します。ここで、各タイプのビジネスオブジェクトを埋めることができる共通のメソッドを作成したいと思います。すべてのビジネスオブジェクトが継承する基本クラスを作成しましたが、共通のメソッドから個々のオブジェクトのプロパティを入力する方法を理解できません。
これは可能ですか(はいの場合、どのように)、または私はドリームワールドにいますか?
PSLINQのような別のルートを使用したくありません。
asp.net - データベースからのデータの取得 ASP.NET MVC + Oracle
ユーザー (Userid、Name、PhoneNumber)
アプリケーション (ApplicationId、UserId、ApplicationName、ActiveDate) の2 つのテーブルがあります。
すべてのユーザーは複数のアプリケーションを持っています。
遅延読み込みを使用する Nhibernate では、すべてのユーザーのすべてのアプリケーションと共にユーザー データを取得できます。だから、私は user.applications[i].Applicationname のようなことをして、すべてのアプリケーションを取得していました。
しかし、Oracleコマンドを使用して、ユーザーデータとともにすべてのアプリケーションを取得するにはどうすればよいですか。結合を使用して 1 つのアプリケーションを取得する方法を知っています。しかし、複数のアプリケーションを取得して IList に保存するにはどうすればよいですか。どんな助けでも大歓迎です。ありがとうございました。
c# - SQLCommand.ExecuteReader() は読み取り専用ステートメントに制限されません
どうやら、ExecuteReader は読み取り専用に使用され、ExecuteNonQuery はトランザクションに使用されます。しかし、何らかの理由で、ExecuteReader を使用した場合でも、書き込み (挿入、更新、削除) コマンド (textbox1 に入力) を実行できます。私のコードに何か問題がありますか、または ExecuteReader が動作するはずの方法を誤解していますか?
mysql - VB.NET2010およびMySql-怠惰な人々のためのDBNULLの処理
MySqlデータベースからのデータでクラスを初期化したい。一部のフィールドはnullになる可能性があります。
db内の最後の2つのフィールドがNULLである可能性があるため、そのフィールドでGetStringを呼び出すと例外が発生するとします。
各フィールドを取得する前に、NULLをテストするコードを確実に記述できます。
しかし、多くのフィールドがある場合、これは「ifs」の悪夢です。
この目的のために、私はIIf VB関数を書き直して、より型指定されたものにし、キャストを回避しました。
私が次のようなものを書くことができるように:
型指定されたIIfは他の場合にはうまく機能しますが、残念ながらこの場合は機能しません。これは、言語キーワードではなく通常の関数であるため、呼び出し中に各inpoutパラメーターが評価され、フィールドがNULLの場合は例外が発生します。 。
エレガントなif-lessソリューションを思いつくことができますか?
sql - データがないときに行を取得するSqlDataReader
これは非常に緊急です。このアプリケーションを3時間半で提示する必要があります。
私のアプリケーションはデータソースをチェックして、データベースに値が存在するかどうかを確認し、問題の値が見つかったかどうかに応じて値を変更します。問題は、SSMSで問題の値を使用してSQLクエリを実行しましたが、行が返されないことですが、DataReaderには行があると表示されます。
これは、私のアプリケーションが不正確に報告していることを意味します。これが私のコードです:
この投稿に関係のないコードを削除しましたが、知りたいことは次のとおりです。
値はブール値ですAcctNumberは文字列です
これは仕事用のアプリケーションなので、SQLクエリは含めたくありません。問題は読者です。コメントアウトするValue = True
と、正しい情報が得られますが、それを省略すると、ValueがTrueである必要がある場合に、レポートも不正確になります。
前もって感謝します!
編集:完全なソースコード:
2010年8月2日(mm / dd / yy)より前に行われた以下のコメントについて:
Value
NumberToCheck
検索された電話番号( )がデータベースに存在することを示すために関数によって返される単なるブール値です。
それで...
val
NumberToCheck(この例では3235553469)がデータベースに存在する場合にのみTrueが返されます。
NumberToCheckの値をSSMSにコピーし、そこでクエリをテストした後、クエリが期待どおりに機能することを確認できます。
いいえ、テーブル内の情報量が多いため(+/- 9.5m行)、DataSetにデータを入力できません。'WHERE'フィルターを使用しても、クエリはリソースに負担がかかりすぎて、最終的には終了しOutOfMemory Exception
ます。そのため、DataReaderを使用しました。
ExecuteScalar
Darrylの回答として提案されているオプションを試してみますが、結果が更新されます。