2013-11-26 4 views
0

두 개의 매개 변수 입력, 출력을 갖는 mssql 저장 프로 시저가 있습니다.C#에서 호출 된 MSSQL 출력 매개 변수의 길이를 선언하십시오.

CREATE PROCEDURE SP_Test1 
     @Pi_Action   INT, 
     @Pv_ErrorMessage VARCHAR(250) OUTPUT 

이 방법으로이 절차를 실행하고 있습니다.

DbManager dbManager = new DbManager(); 
dbManager.ProcName = "SP_Test1"; 
dbManager.addParam("@Pi_Action", SqlDbType.Int, ParameterDirection.Input, 3); 
dbManager.addParam("@Pv_ErrorMessage", SqlDbType.VarChar, ParameterDirection.Output, null); 
     bool resultado = dbManager.executeProc(); 

두 가지 방법으로 DbManager라는 클래스가 있습니다.

public void addParam(string paramName, SqlDbType paramType, ParameterDirection paramDirection, object paramValue) 
    { 
     parametros.Add(new Parametro(paramName, paramType, paramDirection, paramValue)); 
    } 

    public bool executeProc() 
    { 
     using (SqlConnection sqlConnection = new SqlConnection(connStr)) 
     { 
      SqlCommand sqlComm = new SqlCommand(); 
      sqlComm.Connection = sqlConnection; 
      sqlComm.CommandText = ProcName; 
      sqlComm.CommandType = CommandType.StoredProcedure; 

      SqlParameter sqlPar = null; 
      foreach(Parametro parametro in parametros) 
      { 
       sqlPar = new SqlParameter(); 
       sqlPar.ParameterName = parametro.paramName; 
       sqlPar.SqlDbType = parametro.paramType; 
       sqlPar.Direction = parametro.paramDirection; 
       sqlPar.Value = parametro.paramValue; 
       //sqlPar.Size = 300; 
       sqlComm.Parameters.Add(sqlPar); 
      } 
      sqlConnection.Open(); 
      sqlComm.ExecuteNonQuery(); 

      String parVal = (String)sqlComando.Parameters["@Pv_ErrorMessage"].Value; 

      return true; 
     } 

출력 매개 변수의 값을 가져올 때 문자열의 첫 문자 만 반환합니다. 항상 문자열 매개 변수의 길이를 선언해야합니까? 문자열 매개 변수의 길이를 선언하고 전체 문자열을 반환하는 것을 피할 수있는 방법이 있습니까?

도움 주셔서 감사합니다.

+0

만들기 sqlComando.Parameters [ "@ Pv_ErrorMessage"]의 내용을 쿼리합니다. 직접 실행 창의 값은 무엇입니까? 그것도 하나의 char 문자열입니까? – OnoSendai

+0

몇 가지 정보를 찾을 수 있습니다 [여기] (http://stackoverflow.com/questions/3759285/ado-net-the-size-property-has-an-invalid-size-of-0) 및 [여기] (http://stackoverflow.com/questions/14342954/ado-net-safe-to-specify-1-for-sqlparameter-size-for-all-varchar-parameters) –

+0

추가적으로 SqlCommand 생성을 추가해야합니다. using 문에도 사용됩니다. –

답변

0

SqlParameter 클래스는 설정하지 않는 Size 속성을 지원합니다. 당신이 문자열 parVal에서 응용 프로그램을 잠시 중단 할 경우 다음을 추가 한 후 전달하고있는 기존 정보에 추가하여 크기를 수락 할 addParam 방법에 대한 새로운 과부하 ... 단지 호기심

sqlPar.Size = yourNewMethodParameterName