下面是调用存储过程 是返回一个自动生成的订单编号 请高手告诉我哪里出错了
 public static string SelectId()
      {
          string sql = "did";
          SqlParameter para = new SqlParameter("@did", SqlDbType.NVarChar);
          para.Direction = ParameterDirection.Output;
         DataTable dt=DBHelper.GetDataSet(sql, para);//这里是返回DataTable
           return para.ParameterName["@did"].ToString();//这个不知道怎么取返回的编号 自己乱写的
      }异常详细信息: System.InvalidOperationException: String[0]: Size 属性具有无效大小值 0。源错误: 
行 93:            cmd.Parameters.AddRange(values);
行 94:            SqlDataAdapter da = new SqlDataAdapter(cmd);
行 95:            da.Fill(ds);
行 96:            return ds.Tables[0];
行 97:        }
 

解决方案 »

  1.   

    这是 DBHelper类 
     public static int ExecuteCommand(string safeSql)
           {
               SqlCommand cmd = new SqlCommand(safeSql, Connection);
               int result = cmd.ExecuteNonQuery();
               return result;
           }
     
           public static int ExecuteCommand(string sql, params SqlParameter[] values)
           {
               SqlCommand cmd = new SqlCommand(sql, Connection);
               cmd.Parameters.AddRange(values);
               return cmd.ExecuteNonQuery();
           }       public static int GetScalar(string safeSql)
           {
               SqlCommand cmd = new SqlCommand(safeSql, Connection);
               int result = Convert.ToInt32(cmd.ExecuteScalar());
               return result;
           }       public static int GetScalar(string sql, params SqlParameter[] values)
           {
               SqlCommand cmd = new SqlCommand(sql, Connection);
               cmd.Parameters.AddRange(values);
               int result = Convert.ToInt32(cmd.ExecuteScalar());
               return result;
           }       public static SqlDataReader GetReader(string safeSql)
           {
               SqlCommand comd = new SqlCommand(safeSql, Connection);
               SqlDataReader reader = comd.ExecuteReader();
               reader.Close();
               return reader;
           }       public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
           {
               SqlCommand cmd = new SqlCommand(sql, Connection);
               cmd.Parameters.AddRange(values);
               SqlDataReader reader = cmd.ExecuteReader();
               return reader;
           }       public static DataTable GetDataSet(string safeSql)
           {
               DataSet ds = new DataSet();
               SqlCommand cmd = new SqlCommand(safeSql, Connection);
               SqlDataAdapter da = new SqlDataAdapter(cmd);
               da.Fill(ds);
               return ds.Tables[0];
           }       public static DataTable GetDataSet(string sql, params SqlParameter[] values)
           {
               DataSet ds = new DataSet();
               SqlCommand cmd = new SqlCommand(sql, Connection);
               cmd.Parameters.AddRange(values);
               SqlDataAdapter da = new SqlDataAdapter(cmd);
               da.Fill(ds);
               return ds.Tables[0];
           }
      

  2.   

    DataTable dt=DBHelper.GetDataSet(CommandType.StoredProcedure,sql, para);//把命令类型改为存储过程
      

  3.   

    默认CommandType是 CommandType.Text
    要改为CommandType.StoredProcedure