から返されるだけ単一の行を強制しますか?は、私は私のコードでは、この非常に多くのことを書くように見えるのDataReader
答えて
私は知りませんが、このコードは、拡張メソッドに委任することができます。
public static R Single<R>(this DataReader reader, Func<DataReader,R> selector) {
R result = default(R);
if (reader.Read())
result = selector(reader);
if (reader.Read())
throw new DataException("multiple rows returned from query");
return result;
}
はそのように使用する:
using (var reader = cmd.ExecuteReader())
{
User u = reader.Single(r => new User((int)r["UserId"], r["UserName"].ToString()))
}
は、コードの重複からあなたを保存します。
'SqlCommand'の拡張メソッドを作ることで、より重複したコードを避けることができます。 'User u = cmd.Single(...);' –
確かに、その低レベルのAPI上で、いくつかの拡張メソッドを使って、かなり使いやすいものにすることができます:) – flq
私は拡張機能が好きではありません'SqlCommand'は有用なインターフェースを実装していないのであまりにも大変です。 – fearofawhackplanet
SQLを使用してデータを取得する場合は、データリーダーを使用する必要があるたびにその種のコードを削除すると便利です。
SELECT TOP ([Number of rows you want to be selected])
FROM [Table Name]
WHERE [Condition]
EX:
SELECT TOP (1)
FROM tblUsers
WHERE Username = 'Allan Chua'
別のチップを使用ストアドプロシージャ、SQLクエリと、不要なコーディングの繰り返しを最小限に抑えることができ、それらを使用します。
これは、あなたの目標が何であるかに応じて役立つかもしれません。適切な例外をスローするために複数の行が返されたことを検出する必要がある場合、これは役に立ちません。
結果が1つのみ返されるようにするには、このメソッドを使用してパフォーマンスバンプを取得する可能性があります。私が理解しているところでは、データプロバイダはこれを使用して、単一の行結果を予期してクエリを最適化することができます。
いずれの場合でも、SqlCommand.ExecuteReaderを使用してデータリーダーを作成し、CommandBehavior列挙(特にCommandBehavior.SingleRow)から引数を渡します。 ExecuteReaderはこれを受け入れるためにオーバーロードされます。
SqlCommand.ExecuteReader overload
だからあなたのコードは次のようになります。
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
{
result = new User((int)reader["UserId"], reader["UserName"].ToString());
}
}
- 1. 私はこの1つのように答えの多くを見る
- 2. 私はこのような私の見解を書くビュー
- 3. どのように私は常にwebserver.ASP.NETで実行するコード部分を書くことができます
- 4. は、それは私自身が多く、このコードを書く見つけ、自動的にプロパティ変更
- 5. は手動で私は、これは非常識に見えるけど、私はこのような何かをやろうとしているRailsの
- 6. 私はこのように見えたいくつかの.NET 2.0のコードを見たビット列挙
- 7. のRails、ActiveRecordは、多くのクエリは、(含める?)私はこのような問題を抱えて例えば
- 8. アプリケーションは、私がここにいくつかの非常に簡単なコードを持っているWebページ
- 9. は、どのように私はここでは、コードですHttpClientHandler.CookieContainer
- 10. は、どのように私は私のMVC 3ビューで書くことができる午前
- 11. Eazfuscator.NETブレークは、私は多くの小さな列挙型を使用することが私のコードでは
- 12. IOS:私はテキストフィールド1に書くことが私のキーボードを用意して、このビューを開くとiPadの
- 13. これは私のRazor - Viewであまりにも多くのコードですか?
- 14. HTMLは()私の問題は、これらのものと非常によく似ているAJAX呼び出し
- 15. JsonSerializationException私は私のコードで、この非常に奇妙な問題を抱えているXamarin.Android
- 16. 私は私のコードを書くことWebstormを使用していWebstorm
- 17. は、私はこのようないくつかの非常に簡単なサンプルコードが持っているファイル
- 18. 私はこのようなビットに見えるカウンター持っ
- 19. このコードを書くより良い方法はありますか?非常に醜いコードですか?
- 20. React.js私はこのような何か書くことができる燃えさしでEmber.js
- 21. 多くは、私はこのコードを持っている一つの形
- 22. ウェイは、私は多くのことをググPHPスクリプト
- 23. 私のコードを多くの方法に分けるには?
- 24. 私のコードでこの無限ループを取り除くには?
- 25. UILabelで円を描くには?私はこのようないくつかのことをしたい
- 26. 私はそこにあるどのように多くのアレイ深い変えることができる配列を持つ多次元配列
- 27. `yは<X 'ループは決して私は、Pythonをしようとしている、と、私は非常に疲れた状態で、以下のコードで問題を見つけるように見えることはできません
- 28. は、私はこの非常に単純なコードを持っているポインタ
- 29. PropelORM、私はこのように書くのが習慣に慣れて
- 30. どのように私はこのスタイルのCSSを書くことができます
クエリを管理している場合はたぶん、あなたはそれに 'TOP '1'を行うことができます。..あなたのデータベースの完全性をチェックしたいならば、これを行う代わりに 'WHERE'クエリのカラムに対して' UNIQUE INDEX'を置くべきでしょう。 –
あなたのSQLクエリにTOP 1を追加するのはどうですか? – Stecya
私はトップ1を望んでいません、私は例外が欲しいです。彼らはまったく同じものではありません。 – fearofawhackplanet