2014-09-13 50 views
0

我在C#中有下面的代碼,它用於從ORACLE檢索BLOB類型數據到byte[]檢索BLOB數據時出錯。由於對象的當前狀態,操作無效

CODE:

private MemoryStream GetStatement(int loginId, OracleConnection con) 
    { 
     var memoryStream = new MemoryStream(); 
     using (var oraQuery = new OracleCommand(@"SELECT statement_file from user_account_statement where login_id=" + loginId + "", con)) 
     { 

      using (var oraQueryResult = oraQuery.ExecuteReader()) 
       if (oraQueryResult != null) 
       { 
        oraQueryResult.Read(); 
        var blob = new Byte[(oraQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))]; 
        oraQueryResult.GetBytes(0, 0, blob, 0, blob.Length); 
        //updated. 
        memoryStream.Write(blob, 0, blob.Length); 
       } 
     } 
     return memoryStream; 
    } 

錯誤

操作無效由於對象的當前狀態。

的代碼行:

var blob = new Byte[(oraQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))]; 

回答

0

問題通過參數化查詢解決。以下工作代碼:

private static MemoryStream GetStatement(OracleConnection con, int loginId) 
{ 
var memoryStream = new MemoryStream(); 
using (
var oraQuery = new OracleCommand(@"SELECT statement_file from user_account_statement where login_id=:1, con)) 
{ 
    oraQuery.BindByName = true; 
    oraQuery.Parameters.Add(":1", OracleDbType.Int32).Value = loginId; 
    using (var oraQueryResult = oraQuery.ExecuteReader()) 
    if (oraQueryResult != null) 
    { 
    while (oraQueryResult.Read()) 
    { 
    var blob = new Byte[(oraQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))]; 
    oraQueryResult.GetBytes(0, 0, blob, 0, blob.Length); 
    memoryStream.Write(blob, 0, blob.Length); 
    } 
    } 
} 
return memoryStream; 
} 
相關問題