döndü sadece tek bir satırı uygula?benim kodunda bu oldukça çok yazmak gibi DataReader
cevap
Bilmiyorum, ama bu kod bir uzantısı yöntem haline yetki verilebilen:
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;
}
böyle kullanılacak:
using (var reader = cmd.ExecuteReader())
{
User u = reader.Single(r => new User((int)r["UserId"], r["UserName"].ToString()))
}
kod tekrarına sizi kaydediliyor.
'SqlCommand' için bir uzantı yöntemi oluşturarak daha da çoğaltılmış kodlardan kaçınabildik. 'Kullanıcı u = cmd.Single (...);' –
Elbette, bu düşük seviyeli API üzerinde, bir çift uzantı yöntemleri ile oldukça kullanışlı şeyler için şekillendirebilirsiniz :) – flq
Uzatma sevmiyorum 'SqlCommand' çok fazla çünkü herhangi bir kullanışlı arayüz uygulamıyor. – fearofawhackplanet
Verilerinizi almak için bir sql kullanıyorsanız, bu, bir veri okuyucusu kullanmanız gereken her durumda bu tür kodlamaları kaldırmanıza izin vererek yardımcı olabilir.
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'
Başka uç kullanımı saklı prosedürler, SQL sorgusu ve gereksiz kodlama tekrarını en aza indirmek kullanılması.
Hedefinizin ne olduğuna bağlı olarak bu yardımcı olabilir veya olmayabilir. Uygun bir istisna atmak için birden fazla satırın döndüğünü saptamanız gerekiyorsa, bu yardımcı olmaz.
Yalnızca bir sonucun döndüğünden emin olmak istiyorsanız, bu yöntemi kullanarak potansiyel olarak bir performans düşüşü alabilirsiniz. Anladığım kadarıyla, veri sağlayıcıları, tek bir satır sonucunun beklentisiyle sorgulamayı optimize etmek için bunu kullanabilirler.
Her durumda, veri okuyucunuzu oluşturmak için SqlCommand.ExecuteReader komutunu kullanın, ancak CommandBehavior sayımından (özellikle CommandBehavior.SingleRow) bir argüman iletin. ExecuteReader bunu kabul etmek için aşırı yüklenmiştir.
SqlCommand.ExecuteReader overload
Yani kod aşağıdaki gibi görünebilir:
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
{
result = new User((int)reader["UserId"], reader["UserName"].ToString());
}
}
- 1. , benim kodunda bir dosyaya
- 2. Benim socket.io kodunda socket.io
- 3. veri bağlamaları benim XAML kodunda
- 4. Benim kodunda bu var bir <%= for %> görünüm yardımcı
- 5. Haskell benim haskell kodunda bu modülü kullanmaya çalışıyorum
- 6. Benim insan derleyicim ol: Bu Python 2.5 kodunda sorun nedir?
- 7. Bu Python kodunda sorun nedir?
- 8. piton: NameError: Küresel adı' ... ‘Benim kodunda
- 9. Python pandas datareader çalışmıyor
- 10. PHPUnit, arayüzleri alay ve benim kodunda Bazen
- 11. Bu Haskell kodunda "id" ne anlama geliyor?
- 12. DataReader değer satırı, satır
- 13. $ Bu oldukça düz ileri kurulum olduğu
- 14. AutoMapper Haritalama IEnumerable DataReader Issue
- 15. Dosya yazmak için kıvılcım ayırma çok yavaş
- 16. Ben bir temsilci benim kodunda tanımladığınız
- 17. Amaç-C gibi, hızlı "valueForKey" yazmak nasıl?
- 18. Konu bu kodu için bu çıktıyı almak Oldukça neden
- 19. Çoklu dönüşümleri UIView Bu gibi benim görüntü görünümünü dönüştürmek istediğiniz
- 20. nasıl bu gibi kayıtlar var db benim Oracle Oracle
- 21. Bu gibi benim app interaktif tur oluşturmak isteyen
- 22. ASP.NET C# SQL Server DataReader
- 23. Bu bit kodunda TOleStream nasıl kullanılır
- 24. WPF'deki birden çok DataContexts gibi, angularjs bu yaklaşımı destekliyor mu?
- 25. Bu haskell kodunda yıldız ne anlama geliyor?
- 26. Yani kendimi oldukça iyi benim verileri alabilir istirahat API
- 27. Scala için bu hızlı sıralama kodunda bu `sp` sözdizimi nedir?
- 28. Bu gibi constexpr kullanmalı mıyım?
- 29. MongoDB Bu benim kodudur
- 30. dönüştürme Bu benim sınıftır
sorgu üzerinde kontrole sahip Belki, bunun bir 'TOP 1' yapabilirsiniz .. Eğer veritabanınızın bütünlüğünü kontrol etmek isterseniz, bunu yapmak yerine '' WHERE' '' tablonuzun sütunlarına '' UNIQUE INDEX '' koymalısınız. –
SQL-sorgunuza TOP 1'i eklemenin yolu nedir? – Stecya
ÜST 1 istemiyorum, bir istisna istiyorum. Onlar aynı şey değiller. – fearofawhackplanet