2014-09-13 3 views
0

ORACLE에서 BLOB 유형 데이터를 byte[]으로 검색하기위한 C# 코드가 있습니다.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; 
} 
관련 문제