2012-11-20 2 views
0

DB2 데이터베이스를 조회하는 데 사용하는 랩퍼가 있습니다. 래퍼 설정 방법은 쿼리 메서드 내에서 연결을 만들고 처리하는 것입니다. 이 방법으로 래퍼의 소비자는 연결을 관리 (열기 및 닫기)하는 것에 대해 걱정할 필요가 없습니다. 저장 프로 시저로이 작업을 수행 할 수있는 방법이 있습니까? 내 사용자 중 일부는 아웃 바운드 매개 변수를 전송합니다. 위의 쿼리에서와 같이 매개 변수를 데이터 테이블로 변환 할 수있는 방법이 있습니까?스토어드 프로 시저 연결 랩퍼

/// <summary> 
    /// Query A database and return a DataTable of strings with no null 
    /// </summary> 
    /// <param name="txtQuery">The Query</param> 
    /// <param name="list">the paramaters for the query</param> 
    /// <returns>Datatable with results</returns> 
    public DataTable Query(string txtQuery, params string[] list) 
    { 
    //create return ovject 
     DataTable dt = new DataTable(); 
     //pull dbconnection out of pool 
     using (var conn = new DB2Connection(connectionstring)) 
     { 
      //open connection 
      if (!OpenConn(conn)) 
      { 
       throw new Exception(“failed to connect”); 
      } 
      try 
      { 
       //query db 
       using (DB2Command cmd = new DB2Command()) 
       { 
        cmd.Connection = conn; 
        cmd.CommandText = txtQuery; 
        for (int i = 0; i < list.Length; i++) 
        { 
         DB2Parameter param = new DB2Parameter(i.ToString(), list[i]); 
         cmd.Parameters.Add(param); 
        } 
        //fill datatable 
        using (DB2DataAdapter adap = new DB2DataAdapter()) 
        { 
         adap.SelectCommand = cmd; 
         adap.Fill(dt); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      }     
     } 
     return dt; 
    } 
+2

문제를 이해했는지 확실하지 않습니다. 'CommandType'을'StoredProcedure'로 설정하고 그것을'DataAdapter'에 사용하여'DataTable'을 채울 수 있습니다. –

+0

저의 이해는 저장 프로 시저의 경우 원래의 열린 연결이 필요한 데이터 배열을 사용하여 출력 매개 변수를 보낼 수 있습니다. – user889829

+0

'SP'는 무엇을 반환합니까? 행을 반환하는 쿼리 인 경우 어댑터를 사용하여 DataTable을 채울 수 있습니다. –

답변

3

쉽게 할 수는 없지만 가능합니다. 나는 DB2Parameter가 본질적으로이 대답의 SqlParameter와 같다고 가정하고 있습니다 ...

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx 및 관련 페이지는 내가 여기서 말하는 내용을 읽는 데 유용 할 것입니다.

기본적으로 출력 매개 변수를 사용하여 프로 시저를 호출 할 때 평소와 같은 방법으로 호출합니다. 출력 매개 변수의 경우 일반 개체를 전달하지만 출력 매개 변수로 지정할 수있는 매개 변수 개체에 Direction 속성이 있습니다.

프로 시저에서 적절한 execute 메소드를 호출하면 해당 출력 매개 변수의 값이 채워지고 매개 변수 객체에서 검색 할 수 있습니다.

DataTable에 넣으면됩니다. 데이터 테이블을 생성하고 각 출력 매개 변수에 대해 열을 추가 한 다음 모든 값이있는 행을 추가 할 수 있습니다.

데이터베이스 호출을 설정할 때 방향을 적절히 설정할 수 있도록 어떤 매개 변수가 반환되는지 확인해야합니다. 문자열 배열을 전달하는 동안 이것은 거의 불가능할 것입니다.

다른 사람들이 주석에서 모든 데이터를 데이터 집합으로 반환하도록 제안한 것이 가장 좋은 방법입니다. 현재 출력 매개 변수를 사용하는 기존 프로시 저는 출력 매개 변수를 캡처 한 다음 위와 같이 처리 할 수있는 select 문에 넣는 래퍼 프로 시저를 만들 수 있습니다.

다른 옵션은 사용중인 매개 변수 (예 : 내부 또는 외부)에 대한 자세한 내용을 Query 메서드의 호출자에게 전달하는 것입니다. 개인적으로 필자는 모든 데이터를 출력 매개 변수를 사용하는 대신 선택으로 반환하는 것을 선호합니다. 왜냐하면 이러한 종류의 코드를 더 간단하게 만들기 때문입니다.

+0

고맙습니다. – user889829

관련 문제