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;
}
在获取输出参数值的时候,这只返回字符串的第一个字母。 我必须总是声明字符串参数的长度? 存在一种方法,我可以避免声明字符串参数的长度,并返回整个字符串?
感谢您的帮助。
只是出于好奇,如果您暂停了在字符串parVal应用并查询sqlComando.Parameters [“@ Pv_ErrorMessage”]的内容。立即窗口中的值,响应是什么?它也是单字符串吗? – 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) – 2013-11-26 18:14:20
另外,需要添加SqlCommand创建以及使用声明。 –