2012-06-06 26 views
8

Yani C# MSSQL veritabanından bir küçük yazı aldığımda aşağıdaki dökümünü kullandım. Ancak, bu döküm MySQL'de çalışmıyor gibi görünmektedir. BenC# 'daki MySQL'den veri türünü nasıl alabilirim?

(byte)reader["MyField"]; 

ve sadece

(int)reader["MyField"]; 

Edit denedi Ne

İstisna

The specified cast is not valid. 

2 Düzenleme

Bu veri türüdür.

{Name = "SByte" FullName = "System.SByte"} 
+0

Daha fazla kod verebilir misiniz? – craig1231

+0

Okuyucu ["MyField"] + 0; '? 'I denediniz mi? –

+0

@Hans Derlenmeyecek: ifade, '+' işleçle eşleşen 'object + int' yazılır. –

cevap

8

sorun nedeniyle döküm ve açık operatörlere olmasıdır.

ilk gerçek nesne türü sbyte olup byte olması nedeniyle başarısız olursa bir [doğrudan] döküm olup. İkincisi sadece, maalesef hala yukarıda başına bir [direkt] döküm gibi görünüyor sözdizimi ile açık operatör ("Müstehcen Dönüşüm") kullanmak için olur bir dönüşüm gerçekleştirecektir.

var obj = (object)(sbyte)0; 
var i1 = (int)(sbyte)obj; // okay: object (cast)-> sbyte (conversion)-> int 
var i2 = (int)obj;   // fail: sbyte (cast)-> int (but sbyte is not int!) 

Ya bir object alır ve bazı sihirli bir int dönüştürmek does bir (sbyte)objectExpression gerçek nesne türü için geçerli olan döküm ya Convert.ToInt32(objectExpression) kullanın: Burada başarısız sans-veritabanının bir örnektir . (Convert.ToByte kullanmak, taşma üzerinde bir özel durum oluşturabilir.)

Mutlu kodlama!

+0

Doğru! 6 dakika beklemek zorunda. – meanbunny

+1

+1, cidden bu beni her zaman ısırdı ve bu cevabı okuyana kadar, clueless bıraktı! – nawfal

9

doğru türünü belirlemek için ayıklayıcısında

reader["MyField"].GetType() 

değerine bakın.

(byte)objectExpression olduğu (byte)sbyteExpression aynı değildir:

+2

Bir dahi! Bana çok hızlı bir şekilde bakayım. – meanbunny

+2

(Harika bir yorum ... ama "nasıl yapılır" diye cevap vermiyor.) –

+6

İnsanların kendilerine yardım etmelerine yardımcı olmaya çalışıyorum. – usr

İlgili konular