2010-04-22 3 views
1

우리는 6 개의 데이터 테이블을 리턴하는 RPG 사람들로부터 "저장 프로 시저"를 받았습니다. .NET 용 iSeries Provider (V5R4와 V6R1을 모두 사용하여 시도)를 사용하여 .NET (C#, 3.5)에서 호출하려고하면 저장된 프로 시저를 호출하는 방법에 따라 다른 결과가 표시됩니다. 여기에 우리가 그것을 할 원합니다 방법 :매우 이상한 iSeries Provider 동작

using (var dbConnection = new iDB2Connection("connectionString")) 
{ 
    dbConnection.Open(); 
    using(var cmd = dbConnection.CreateCommand()) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandText = "StoredProcName"; 
     cmd.Parameters.Add(new iDB2Parameter("InParm1", 
      iDB2DbType.Varchar).Value = thing; 
     var ds = new DataSet(); 
     var da = new iDB2DataAdapter(cmd); 
     da.Fill(ds); 
    } 
} 

이런 식으로 이렇게, 우리는 다섯 테이블 다시 결과 집합에서 얻을. 우리가 할 경우,이 :

cmd.CommandType = CommandType.Text; 
cmd.CommandText = "CALL StoredProcName('" + thing + "')"; 

우리는 예상 SIX 테이블을 다시 얻을.

저는 .NET-to-DB2를 사용하는 분들이 많이 계시지 만, 저는 이전에이 프로그램을 본 적이 있기를 바랍니다.

TIA.

답변

1

연결 문자열의 LibraryList (그리고 아마도 Naming) 속성을 살펴보십시오. CommandType.StoredProcedure를 사용하면 SQL 데이터베이스 라이브러리에서 저장 프로 시저를 바로 실행할 수 있습니다. CommandType.Text를 사용하면 라이브러리 목록을 검색하여 저장 프로 시저를 찾습니다. 다른 라이브러리에서 다른 버전의 저장 프로 시저를 실행하면 결과가 달라집니다.

+0

고마워요! 우리는 이것을 경험하지 않고 있지만 이것은 분명히 알아야 할 것이고 잘 알고 있어야합니다. – David