2010-06-11 32 views
20

Tôi có một cuộc gọi thủ tục lưu trữ mà đi như thế này:Chuyển đổi OracleParameter.Value để Int32

using (OracleConnection con = new OracleConnection(ConfigurationManager.AppSettings["Database"])) 
using (OracleCommand cmd = new OracleCommand("Package.Procedure", con)) 
{ 
    Int32 existsCount; 

    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("successCount", OracleDbType.Int32, 0, ParameterDirection.InputOutput); 
    cmd.Parameters.Add("BusinessId", OracleDbType.Int64, listRec.BusinessId, ParameterDirection.Input); 

    con.Open(); 
    cmd.ExecuteScalar(); 
    con.Close(); 

    existsCount = Convert.ToInt32(cmd.Parameters["successCount"].Value); 

    return (existsCount); 
} 

Nhưng trên dòng này:

existsCount = Convert.ToInt32(cmd.Parameters["successCount"].Value); 

Nó ném ngoại lệ "Unable to cast đối tượng của loại 'Oracle.DataAccess.Types.OracleDecimal' để nhập 'System.IConvertible'. "

Mọi suy nghĩ? Cảm ơn.

Trả lời

22

gì về

existsCount = int.Parse(cmd.Parameters["successCount"].Value.ToString()); 
+1

Đúng vậy! Cảm ơn, bây giờ tôi cảm thấy ngớ ngẩn. Nhưng cảm ơn rất nhiều. – FelixMM

+2

Điều đó không ngu ngốc. Convert.To ... nên là choise tốt hơn nếu có. Vì int.Parse() về cơ bản chỉ phân tích cú pháp giá trị chuỗi nên ở trên một chút. Tuy nhiên, một điều có thể làm việc quá (không nghĩ về nó ngay từ đầu) là: existCount = (int) cmd.Parameters ["successCount"] .Giá trị nếu có chuyển đổi rõ ràng do thư viện Oracle cung cấp. –

+2

Ouch, không TryParse? –

32

Bạn cũng có thể thử:

Oracle.DataAccess.Types.OracleDecimal d = (Oracle.DataAccess.Types.OracleDecimal)cmd.Parameters["successCount"].Value; 

if(d.IsNull) 
    existsCount = 0; 
else 
    existsCount = d.ToInt32(); 
+0

Tôi đã thử nghiệm điều này và nó có hiệu suất tốt hơn so với giải pháp trước đó. – Meryovi

+2

Đây là câu trả lời đúng nhất - không biết tại sao tất cả đều ở phía dưới. –

-1

tôi đề nghị bạn chuyển đổi sang String, và sau đó bạn chuyển đổi String-Integer.

Dim tmpIdSesiónCalificación As String = 
    parametroIdSesiónCalificación.Value.ToString 
_idSesiónCalificación = Convert.ToInt32(tmpIdSesiónCalificación) 
2

Đó là hiệu quả hơn để sử dụng

Convert.ToInt32((decimal)(OracleDecimal)(cmd.Parameters["successCount"].Value)) 
Các vấn đề liên quan