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;
}
출력 매개 변수의 값을 가져올 때 문자열의 첫 문자 만 반환합니다. 항상 문자열 매개 변수의 길이를 선언해야합니까? 문자열 매개 변수의 길이를 선언하고 전체 문자열을 반환하는 것을 피할 수있는 방법이 있습니까?
도움 주셔서 감사합니다.
만들기 sqlComando.Parameters [ "@ Pv_ErrorMessage"]의 내용을 쿼리합니다. 직접 실행 창의 값은 무엇입니까? 그것도 하나의 char 문자열입니까? – OnoSendai
몇 가지 정보를 찾을 수 있습니다 [여기] (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) –
추가적으로 SqlCommand 생성을 추가해야합니다. using 문에도 사용됩니다. –