2009-09-18 3 views
1

작성자가 Microsoft.Practices.EnterpriseLibrary.Data library을 사용하는 ASP.NET (C#) 응용 프로그램에서 함수를 상속했지만 System.Data.OracleClient을 사용하도록 변경해야합니다. 이 함수는 데이터베이스의 저장 프로 시저 양식을 사용합니다. itemNameopenDate은 함수가 사용하는 문자열 매개 변수입니다. PKG_AUCTION_ITEMS.IsAuctionItem은 저장 프로 시저의 함수 이름입니다. 여기 DbCommand 개체에서 OracleCommand 개체로 변환

string result = String.Empty; 

    Database db = DatabaseFactory.CreateDatabase("OraData"); 
    using (DbCommand cmdDB = db.GetStoredProcCommand("PKG_AUCTION_ITEMS.IsAuctionItem")) 
    { 
     db.AddInParameter(cmdDB, "vItemName", DbType.String, itemName); 
     db.AddInParameter(cmdDB, "vOpenDate", DbType.String, openDate); 
     db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null); 


     db.ExecuteNonQuery(cmdDB); 
     result = cmdDB.Parameters["ret"].Value.ToString(); 
    } 

내 코드 :( connstr 연결 문자열입니다)

string result = String.Empty; 
    OracleConnection conn = new OracleConnection(connstr); 
    OracleCommand cmd = new OracleCommand("PKG_AUCTION_ITEMS.IsAuctionItem",conn); 
    myCmd.CommandType = CommandType.StoredProcedure; 

    using (myCmd) 
    { 
     myCmd.Parameters.AddWithValue("vItemName", itemName); 
     myCmd.Parameters.AddWithValue("vOpenDate", openDate); 
     myCmd.Parameters.AddWithValue("ret", ???); 
     myCmd.ExecuteNonQuery(); 
     result = myCmd.Parameters["ret"].Value.ToString(); 
    } 

내가 AddInParameter과 AddParameter의 차이가 무엇인지 이해하지 못하는 것입니다 : 여기

내가받은 코드 이 행의 기능은 다음과 같습니다.

db.AddParameter(cmdDB, "ret", DbType.String, 2, ParameterDirection.ReturnValue, false, 0, 0, null, DataRowVersion.Current, null); 

오른쪽에 tr 알았지? 아무도 도와 줄 수 있습니까? 감사합니다

+0

로 설정? 오라클을 사용하기 위해서는 설정 파일을 바꿀 수 있어야했습니다. – CAbbott

+0

Microsoft.Practice 라이브러리는 여기에서 사용되는 표준 라이브러리가 아니므로 빌드 엔진에는 없습니다.이 때문에 프로젝트를 서버에 빌드 할 수 없습니다. – zohair

+0

작동하려면 웹 서버에 Enterprise Library를 설치해야합니다. – Juri

답변

1

db.AddParameter는이 경우 출력 매개 변수를 추가합니다. db 클라이언트 라이브러리가 sproc 호출에서 반환 값을 반환 받기를 원한다는 것을 알 필요가 있습니다. 따라서 AddParameter를 호출합니다. db.AddInParameter는 매개 변수 만있는 매개 변수를 추가합니다. 그것에서 ParameterDirection.Input을 사용하여 db.AddParameter에 대한 지름길입니다. AddInParameter 대 AddParameter에 대한 설명은 http://blogs.x2line.com/al/archive/2006/03/25/1579.aspx을 참조하십시오.

마찬가지로 OracleClient를 사용하면 AddWithValue는 AddInParameter와 유사합니다. AddInParameter는 이미 값을 알고있을 때 입력 매개 변수에 사용할 바로 가기입니다. 반환 값은 정의에 따라 출력 매개 변수이므로 AddWithValue를 사용할 수 없습니다. Parameters.Add()를 대신 사용해야합니다.

이제 주요 질문으로 돌아가십시오. OracleClient를 사용하는 동일한 코드는 무엇입니까? 그것은이 같은 뭔가 : 우리는 실제로 더 명시 적으로 매개 변수의 구성, 당신은 볼이

System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand("PACKAGE_NAME.STORED_NAME"); 
command.CommandType = System.Data.CommandType.StoredProcedure; 

System.Data.OracleClient.OracleParameter param; 
param = new System.Data.OracleClient.OracleParameter("PARAM_NAME_ID", System.Data.OracleClient.OracleType.Number); 
param.Value = id; 
command.Parameters.Add(param); 

param = new System.Data.OracleClient.OracleParameter("PARAM_NAME_RETURN_COUNT", System.Data.OracleClient.OracleType.Number); 
param.Direction = System.Data.ParameterDirection.Output; 
command.Parameters.Add(param); 
... 

뭔가를 할

string result = String.Empty; 
OracleConnection conn = new OracleConnection(connstr); 
OracleCommand cmd = new OracleCommand("PKG_AUCTION_ITEMS.IsAuctionItem",conn); 
myCmd.CommandType = CommandType.StoredProcedure; 

using (myCmd) 
{ 
    myCmd.Parameters.AddWithValue("vItemName", itemName); 
    myCmd.Parameters.AddWithValue("vOpenDate", openDate); 

    // depending on whether you're using Microsoft's or Oracle's ODP, you 
    // may need to use OracleType.Varchar instead of OracleDbType.Varchar2. 
    // See http://forums.asp.net/t/1002097.aspx for more details. 
    OracleParameter retval = new OracleParameter("ret",OracleDbType.Varchar2,2); 
    retval.Direction = ParameterDirection.ReturnValue; 
    myCmd.Parameters.Add(retval); 

    myCmd.ExecuteNonQuery(); 
    result = myCmd.Parameters["ret"].Value.ToString(); 
} 
+0

그렇다면'OracleClient'를 사용한다면'AddInParameter'와 같은 것이 될까요? – zohair

+0

매개 변수를 별도로 만들고 ParameterDirection.ReturnValue를 설정 한 다음 Parameters.Add()를 사용하십시오. 위의 코드 샘플을 보여주기 위해 대답을 편집했습니다. –

+0

감사합니다. 이것은 완벽하게 작동합니다! – zohair

0

, 우리는 명시 적으로있는 매개 변수에 대한 지정 속성 방향이 반환됩니다. 첫 번째 변수는 "id"변수의 값을 가져오고 저장 프로 시저로 전달되는 매개 변수입니다.

제 2 회 한

따라서 값이이 매개 변수 값에 할당되지 않은 저장 프로 시저에 의해 반환되는 당신이 그것을 변경했다 왜 방향이 "System.Data.ParameterDirection.Output"