2012-01-06 18 views
9

C# içinde Hazırlanmış bir Deyimi kullanıyorum.Hazırlanan Deyimde SqlDBType.Decimal Kullanarak C#

SqlCommand inscommand = new SqlCommand(supInsert, connection); 
inscommand.Parameters.Add("@ordQty", SqlDbType.Decimal,18); 
inscommand.Prepare(); 
u = inscommand.ExecuteNonQuery(); 

Yukarıdaki kod İstisna altına atar:

SqlCommand.Prepare yöntemi türü 'Ondalık' sahip açıkça ayarlanmış Hassas ve Ölçek parametre gerekir.

DÜZENLEME: Bu İstisna

+0

Bir sorunuz mu var? Hata hakkında ne belirsiz buluyorsunuz? – Oded

+0

Merhaba Oded, Evet Hassasiyet ve ölçek ayarlamak için yukarıdaki istisnayı alıyorum. –

+0

Ve? Hata hakkında net olmayan nedir? Kesinlik ve ölçek ayarlamanız gerekir. – Oded

cevap

28

önlemek için nasıl Hassas 18 ve Ölçeği 8 (ondalık (18,8))

SqlCommand insertCommand= new SqlCommand(supInsert, connection); 
insertCommand.Parameters.Add("@ordQty", SqlDbType.Decimal,18); 

insertCommand.Parameters["@ordQty"].Precision = 18; 
insertCommand.Parameters["@ordQty"].Scale = 8; 

insertCommand.Prepare(); 
u = insertCommand.ExecuteNonQuery(); 
3

Açıkça hassas tanımlamak zorunda kalacak olan bir ondalık 'kuracak aşağıdaki ve bu parametre için ölçeklendirin.

SqlParameter ordQty = cmd.Parameters.Add("@ordQty", SqlDbType.Decimal); 
ordQty.Precision = x; //Replace x with what you expect in Sql Sp 
ordQty.Scale = y; //Replace y with what you expect in Sql Sp 
ordQty.Value = 18; //Set value here 
inscommand.Parameters.Add(ordQty); 
4

bu deneyin: istisna belirttiği gibi

SqlParameter parameter = new SqlParameter("@ordQty", SqlDbType.Decimal); 
parameter.Precision = 18; 
parameter.Scale = 0; 
parameter.Value = YOURVALUEHERE; 
inscommand.Parameters.Add(parameter); 
6

, açıkça parametre olarak decimal tipini kullanmak için SqlParameter.Precision ve SqlParameter.Scale özellikleri ayarlamak gerekir.

SQL alanınızın decimal(18,8) türünde olduğunu varsayalım. eğer

cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) { 
    Precision = 18, Scale = 8 }); 

Ayrıca, değer katmak için

cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) { 
    Precision = 18, Scale = 8}).Value = 0.4m; // or whatever 

yapabilirsiniz şöyledir: Bu satır içi yapmanın yolu, SqlParameterCollection eklemeden sırasında SqlParameter için ayracı-başlatmayı kullanmaktır Bir tanesine ihtiyacım var. İsterseniz,

'u da yapabilirsiniz. Brace initialization gerçekten güçlüdür.

Yan not: Bunun eski bir soru olduğunu anlıyorum, ancak bu formun, nesneyi listeye eklerken oluşturmasından ve ölçek ve kesinlik ayarından çok daha okunabilir olduğunu düşünüyorum. Posterity için! (Bu bir yüksek listeleme google arama sonucu olduğu için)

İlgili konular