2013-11-26 18 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

只是出于好奇,如果您暂停了在字符串parVal应用并查询sqlComando.Parameters [“@ Pv_ErrorMessage”]的内容。立即窗口中的值,响应是什么?它也是单字符串吗? – 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) – 2013-11-26 18:14:20

+0

另外,需要添加SqlCommand创建以及使用声明。 –

回答

0

SqlParameter类支持您未设置的Size属性。为您的addParam方法接受的大小除了你传递,然后添加下面的现有信息新的过载...

sqlPar.Size = yourNewMethodParameterName