2012-01-06 49 views
9

đang sử dụng câu lệnh được chuẩn bị trong C#.Sử dụng SqlDBType.Decimal trong câu lệnh được chuẩn bị C#

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

Đoạn mã trên ném dưới đây Ngoại lệ:

phương pháp SqlCommand.Prepare đòi hỏi các thông số của loại 'Decimal' có một thiết lập một cách rõ ràng chính xác và Scale.

EDIT: Làm thế nào để tránh Exception này

+0

Bạn có câu hỏi không? Bạn thấy gì về lỗi này? – Oded

+0

Xin chào Oded, Có Có ngoại lệ trên để đặt độ chính xác và tỷ lệ. –

+0

Và? Điều gì không rõ ràng về lỗi? Bạn cần đặt độ chính xác và tỷ lệ. – Oded

Trả lời

28

Sau đây sẽ thiết lập một số thập phân với Precision 18 và Scale 8 (Decimal (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

Bạn sẽ phải xác định một cách rõ ràng chính xác và mở rộng cho tham số này.

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

thử điều này:

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

Khi ngoại lệ chỉ ra, bạn phải thiết lập một cách rõ ràng SqlParameter.PrecisionSqlParameter.Scale tính để sử dụng các loại decimal như một tham số.

Giả sử trường SQL của bạn thuộc loại decimal(18,8). Cách làm nội tuyến này là sử dụng cú đúp-khởi cho SqlParameter của bạn trong khi thêm nó vào SqlParameterCollection, như sau:

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

Bạn cũng có thể làm

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

để thêm giá trị, nếu bạn cần một. Bạn thậm chí có thể làm

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

nếu bạn muốn. Brace initialization thực sự mạnh mẽ.

Lưu ý phụ: Tôi nhận thấy đây là một câu hỏi cũ, nhưng tôi nghĩ biểu mẫu này dễ đọc hơn là tạo đối tượng trong khi thêm nó vào danh sách và sau đó đặt tỷ lệ và độ chính xác. Đối với Posterity! (vì đây là kết quả tìm kiếm google liệt kê cao)

Các vấn đề liên quan