2014-06-07 46 views
14

Basit bir sorgu kullanarak kullanıcı bilgilerini bir veritabanından alıyorum.SqlDataReader ile bit değeri nasıl alınır ve boole dönüştürülür?

select * from dbo.[User] u where u.Email = @email 

Daha sonra (veritabanında bir bit türü sütunu ile temsil edilir) IsConfirmed olarak adlandırılan bir sütunun değerini almak ve bool dönüştürmek deneyin.

bool isConfirmed = int.Parse(sqlDataReader["IsConfirmed"].ToString()) == 1; 

Sonra belirten bir FormatException hata olsun "Giriş dizesi doğru biçimde değildi.".

Ben bir cevap bu kodu sağlayan benzer bir soru gördü:

bool isConfirmed = sqlDataReader.GetBoolean(0); 

Ama IsConfirmed sütun dizini bilmiyorum çünkü bu, benim durumumda işe yaramaz, benim yok bilmek istiyorum. Sütun adını kullanmak istiyorum.

cevap

16

Veri okuyucu dizinleyici özelliğinden döndürülen değer, yazım nesnesine aittir, ancak depolandığı veri türüne dönüştürülebilir.

bu deneyin: Eğer sütun adı kullanmak istiyorsanız size sütunda IsConfirmed herhangi boş değer yoksa

bool isConfirmed = (bool)sqlDataReader["IsConfirmed"] 
9

Eğer

bool isConfirmed = sqlDataReader.GetBoolean(sqlDataReader.GetOrdinal("IsConfirmed")); 
3

Kodunuz çalışmalıdır kullanabilirsiniz.
Genellikle bu bit sütunları NOT NULL özelliğine ve/veya varsayılan 0 değerine sahiptir, ancak boş bir değere sahip olabilir ve bu durumda kodunuz belirtilen hatayla başarısız olur. Eğer gerçekten bir uzantısı yöntem oluşturabilir Sütun Konumunu bulmak için bir çağrı yapmak sevmediğim

Bu şekilde her saptamak o

int colPos = sqlDataReader.GetOrdinal("IsConfirmed"); 
bool isConfirmed = sqlDataReader.IsDBNull(colPos) ? false : sqlDataReader.GetBoolean(colPos)); 

(Bununla birlikte bu kontrol için sütun konumunu gerekir) o gizleme çağrı

public static class ReaderExtensions 
{ 
    public static bool IsDBNull(this SqlDataReader reader, string colName) 
    { 
     int colPos = reader.GetOrdinal(colName); 
     return reader.IsDBNull(colPos); 
    } 
} 

şekilde dönüp

bool isConfirmed = int.Parse((sqlDataReader.IsDBNull("IsConfirmed") 
        ? "0" : sqlDataReader["IsConfirmed"].ToString())) == 1; 
ile diyoruz
+0

Bu, hata durumlarını da ele almak için en kapsamlı ve eksiksiz bir yanıttır. +1 – Ant