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

时间:2013-11-26 17:38:38

标签: c# sqlcommand sqlparameters

我有一个带有两个参数输入,输出的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;
         }

在我得到输出参数值的时候,这只返回字符串的第一个字母。 我必须总是声明字符串参数的长度? 存在一种方法我可以避免声明字符串参数的长度并返回整个字符串吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

sqlPar.Size = yourNewMethodParameterName