[解決済み】SqlDataReader オブジェクトのカラム名を確認する
2022-04-05 04:54:21
質問
にカラムが存在するかどうかを確認するには、どうすればよいですか?
SqlDataReader
オブジェクトを作成できますか? データアクセスレイヤーで、複数のストアドプロシージャーの呼び出しに対して同じオブジェクトを構築するメソッドを作成しました。 ストアドプロシージャの1つは、他のストアドプロシージャでは使用されない追加のカラムを持っています。 私は、すべてのシナリオに対応するためにメソッドを変更したい。
私のアプリケーションはC#で書かれています。
どのように解決するのですか?
public static class DataRecordExtensions
{
public static bool HasColumn(this IDataRecord dr, string columnName)
{
for (int i=0; i < dr.FieldCount; i++)
{
if (dr.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase))
return true;
}
return false;
}
}
使用方法
Exception
を制御ロジックに使用することは、他の回答のように
バッドプラクティスと考えられている
であり、パフォーマンスが犠牲になります。また、プロファイラに # 例外が発生したと誤検出される可能性もありますし、例外が発生したときにデバッガがブレークするように設定している人は大変です。
GetSchemaTable() もまた、多くの回答で提案されています。これは、すべてのバージョンで実装されているわけではない(抽象的で、dotnetcoreのいくつかのバージョンではNotSupportedExceptionを投げる)ので、フィールドが存在するかどうかをチェックする方法として推奨されるものではありません。また、GetSchemaTableはパフォーマンス的にも過剰な機能です。 ソースを確認する .
フィールドをループすることは、それを頻繁に使用する場合、若干のパフォーマンスヒットをもたらす可能性があり、結果をキャッシュすることを検討した方がよいでしょう。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】C#で四捨五入する方法
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] URLのPath.Combineは?
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み】SqlDataReaderからカラム名を取得することは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】SqlDataReaderからカラム名を取得することは可能ですか?