我有这样一个方法public DataSet CallProcedure(string szProcedureName, string args)
        {
            DataSet proDs = new DataSet();
                CommClass comm = new CommClass();
                SqlConnection conn = comm.myconnection;
                SqlDataAdapter sqlAdapter = new SqlDataAdapter(szProcedureName, conn); 
                conn.Open();     
                sqlAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                string[] procedureArgs = Regex.Split(args, "-");
                string[] proArgs;
                foreach (string str in procedureArgs)
                {                    SqlParameter sqlPar = new SqlParameter();                    proArgs = Regex.Split(str, ",");
                    for (int i = 0; i < 1; i++)
                    {
                        sqlPar.ParameterName = "" + proArgs[0].ToString() + "";
                        sqlPar.SqlDbType = SqlDbType.Int;
                        sqlPar.Value = Convert.ToInt32(proArgs[3]);
                        if (proArgs[2] == "1")
                        {
                            sqlPar.Direction = ParameterDirection.Input;
                        }
                        else if (proArgs[2] == "2")
                        {
                            sqlPar.Direction = ParameterDirection.Output;
                        }
                        sqlPar.Value = proArgs[4];                    }                    sqlAdapter.SelectCommand.Parameters.Add(sqlPar);
                    sqlAdapter.Fill(proDs);                  
                        
                    
                }
                conn.Close();            if (proDs != null)
            {
                return proDs;
            }
            else
            {
                return null;
            }
调用是这样的
string ss = "@id,,1,4,3-@name,,1,4,2";
        this.rpt.DataSource=CallProcedure("pr1", ss);
        this.rpt.DataBind();现在有个问题。
程序说为存储过程提供的参数太多。
请问我要如何修改才能正确执行我这个传进入的  ss

解决方案 »

  1.   

    1.你理解錯了,這裡說的參數太多并不是指真正的參數過多,而是因為你的參數數目不確定導致了sql報參數太多或太少.
    2.那就直接用一個參數ss帶進去.然後在sql中用去分解這些參數。
      

  2.   

    谢楼上的回复。
    我传入的这个参数是这样的
    string ss = "@id,,1,4,3-@name,,1,4,2";
    然后在方法中用split先按“-”分割成两个:"@id,,1,4,3和@name,,1,4,2
    然后在执行的。
    现在报我上面的错
      

  3.   

    2楼的
    我在方法中这个部分已经加上“”了。不需要加‘’加了更报错
    sqlPar.ParameterName = "" + proArgs[0].ToString() + "";
      

  4.   

    for (int i = 0; i < 1; i++)
     
    For(int i=0;i<??;i++)这边你自己看着改下
      

  5.   

    5楼的。我这里的for现在有点多余。去掉和不去掉是一个样子的
      

  6.   

    参数太多说明你提供的参数多了 用数组 再foreach添加进去 LZ单步调试下看输出来的结果
      

  7.   

    string ss = "@id,,1,4,3-@name,,1,4,2";
    多了一个,
      

  8.   

    "@id,1,4,3-@name,1,4,2
    调试看看sqlPar值
    if(!string.IsNullOrEmpty(proArgs[0].ToString())
    {
     sqlPar.ParameterName = "" + proArgs[0].ToString() + "";
                            sqlPar.SqlDbType = SqlDbType.Int;
                            sqlPar.Value = Convert.ToInt32(proArgs[2]);
                            if (proArgs[1] == "1")
                            {
                                sqlPar.Direction = ParameterDirection.Input;
                            }
                            else if (proArgs[1] == "2")
                            {
                                sqlPar.Direction = ParameterDirection.Output;
                            }
    }
      

  9.   

    "@id,1,4,3-@name,1,4,2 
      

  10.   

    SqlParameter sqlPar = new SqlParameter();                    proArgs = Regex.Split(str, ",");
                        for (int i = 0; i < 1; i++)
                        {
                            sqlPar.ParameterName = "" + proArgs[0].ToString() + "";
                            sqlPar.SqlDbType = SqlDbType.Int;
                            sqlPar.Value = Convert.ToInt32(proArgs[3]);
                            if (proArgs[2] == "1")
                            {
                                sqlPar.Direction = ParameterDirection.Input;
                            }
                            else if (proArgs[2] == "2")
                            {
                                sqlPar.Direction = ParameterDirection.Output;
                            }
                            sqlPar.Value = proArgs[4];                    }                    sqlAdapter.SelectCommand.Parameters.Add(sqlPar);=====================================
    看起来只new了一个,没有问题吗?我没试过
    你看看最后执行前,Parameters有几个
      

  11.   

    SqlParameter sqlPar = new SqlParameter();                     proArgs = Regex.Split(str, ","); 
                        for (int i = 0; i < 1; i++) 
                        { 
                            sqlPar.ParameterName = "" + proArgs[0].ToString() + ""; 
                            sqlPar.SqlDbType = SqlDbType.Int; 
                            sqlPar.Value = Convert.ToInt32(proArgs[3]); 
                            if (proArgs[2] == "1") 
                            { 
                                sqlPar.Direction = ParameterDirection.Input; 
                            } 
                            else if (proArgs[2] == "2") 
                            { 
                                sqlPar.Direction = ParameterDirection.Output; 
                            } 
                            sqlPar.Value = proArgs[4];                     }                     sqlAdapter.SelectCommand.Parameters.Add(sqlPar); 
    SqlParameter sqlPar = new SqlParameter(); 
    sqlAdapter.SelectCommand.Parameters.Add(sqlPar); 
    这两行应该在for循环里面的吧