C# 声明从C调用的MSSQL输出参数的长度#

C# 声明从C调用的MSSQL输出参数的长度#,c#,sqlcommand,sqlparameter,C#,Sqlcommand,Sqlparameter,我有一个mssql存储程序,有两个参数输入,输出 CREATE PROCEDURE SP_Test1 @Pi_Action INT, @Pv_ErrorMessage VARCHAR(250) OUTPUT 我正在以这种方式从应用程序执行此过程 DbManager dbManager = new DbManager(); dbManager.ProcName = "SP_Test1"; dbManager.addParam("@Pi

我有一个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;
         }
在获取输出参数的值时,这只返回字符串的第一个字母。 我必须始终声明字符串参数的长度? 是否有一种方法可以避免声明字符串参数的长度并返回整个字符串


感谢您的帮助。

SqlParameter类支持您未设置的Size属性。为addParam方法创建一个新的重载,该方法除了接受正在传递的现有信息外,还接受该大小,然后添加以下内容

sqlPar.Size = yourNewMethodParameterName

出于好奇,如果您在字符串parVal行暂停应用程序,并在即时窗口上查询sqlComando.Parameters[“@Pv_ErrorMessage”].Value的内容,那么响应是什么?它也是一个单字符字符串吗?您会发现一些信息,另外,还需要将SqlCommand创建添加到using语句中。