2009-02-06 18 views
5

EğerEğer SPROC en son ifadesi yaptığında

int blah = Convert.ToInt32(cmd.ExecuteScalar()); 

kullanabilir miyim @value cmd.ExecuteScalar kullanabilir miyim :

SEÇ

Ayrıca @value, bu bana bir nesnesi boş istisna verir:

int blah = (int)cmd.ExecuteScalar(); 

convert.toint32 ve (int) aynı şey değil, diğeri diğerinin sarıcısıdır?

cevap

8

Hayır, yapamazsınız. ExecuteScalar() yöntemi, sonuç kümesinde döndürülen tek bir değer olarak dönmek üzere tasarlanmıştır. Temel olarak, ilk satırın ilk sütunundaki değer döndü.

Dönüş değerini elde etmek için SQLCommand nesnesine bir parametre eklemeniz gerekir. "@RETURN_VALUE" adını kullanın ve parametre nesnesini oluştururken Return parametresinin yönünü belirtin. Daha sonra ExecuteNonQuery() yöntemini kullanabilirsiniz.

IMO, saklı yordam dönüş değerlerinin yalnızca prosedürün durumunu göstermesi gerektiğini not etmeliyim. Tüm veriler sonuç kümeleri veya çıkış parametreleri ile iade edilmelidir.

3

Diğer sorunuzu yanıtlamak için, (int) gerçekte bir dönüşümden farklı olan bir dökümdür (Convert.ToInt32).

Bir dökümde, dönüştürülmekte olan nesnenin gerçekten dönüştürdüğünüz türden olduğunu, dolayısıyla hiçbir gerçek dönüşüm/ayrıştırma yapılmadığını söylüyorsunuz. Bir int null olamaz, çünkü cast edeceğiniz nesne boş olduğunda ve istisna atıldığında geçersizdir.

Dönüştürme bazı gerçek ayrıştırma ve mantıkla gerçekleşir ve dönüştürülen nesnenin null olduğu durumu işler.

Bu here hakkında daha fazla bilgi var.