做了个简单的三层,向数据库中添加东西,用得存储过程,因为不太熟悉,所以一直出现问题,但是我却不知道究竟什么地方出现了问题!请教大家!
BLL层:
  public News SelectById(string id)
  {
        return ndao.SelectById(id);
  }
 public DataTable SelectByNewsId(string newsId)
        {
            return cdao.SelectByNewsId(newsId);
        }
DAL层:
public News SelectById(string id)
        {
            //TODO:根据类别ID取出该条新闻主题内容
            News n = new News();
            DataTable dt = new DataTable();
            string cmdText = "news_selectById";//存储过程
            SqlParameter[] paras = new SqlParameter[] {
                new SqlParameter("@id", id)
            };
            dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
            n.Id = id;
            n.Title = dt.Rows[0]["title"].ToString();
            n.Content = dt.Rows[0]["content"].ToString();
            n.CreateTime = dt.Rows[0]["createTime"].ToString();
            n.CaId = dt.Rows[0]["caId"].ToString();
            return n;
        }
WEB层:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            string newsid =Request.QueryString["newsid"];
            NewsManager nm = new NewsManager();
            News news = nm.SelectById(newsid);
            //设置新闻主题
            lblTitle.Text = news.Title;
            lblContent.Text = news.Content;
            lblCreateTime.Text = news.CreateTime;
            //绑定新闻评论
            repComment.DataSource = new CommentManager().SelectByNewsId(newsid);
            repComment.DataBind();
 
        }
在运行过程中老提示说:过程 'news_selectById' 需要参数 '@id',但未提供该参数。 请大家帮忙给看看怎么回事。

解决方案 »

  1.   

    SqlParameter[] paras = new SqlParameter[] {
      new SqlParameter("@id", id)
      };
    这句仔细看看
      

  2.   

    http://zhidao.baidu.com/question/92660743.html
      

  3.   

    CREATE PROCEDURE news_selectById 
     @id int
    AS
    BEGIN
            select title,[content],createTime,caId from news where id=@id
    END
    这是存储过程。感觉SqlParameter[] paras = new SqlParameter[] {
      new SqlParameter("@id", id)
      };没错啊。
      

  4.   

    错了,传进去貌似不要declear的
      

  5.   

    存储过程没问题,问题应该出在你的ID往里传的地方,你应该单步调试,进入
    dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
    这个函数,看看这个id到底传进去没有
      

  6.   

    id是字符串,
    SqlParameter[] paras = new SqlParameter[] {
      new SqlParameter("@id", id)
      };
    把这句改成下边的试试
    SqlParameter[] paras = new SqlParameter[1];paras[0] = new SqlParameter("@id",SqlDbType.Int32);
     paras[0].Value=Convert.ToInt32(id); 
      

  7.   

    检查sqlhelper.ExecuteQuery里
    参数设置
    SqlParameter[] ps = new SqlParameter[]{
    new SqlParameter("@ID",SqlDbType.Int) };
     ps[0].Value = id;int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "", new SqlParameter("@id", 1));
    public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {}
      

  8.   

    SqlParameter[] paras = new SqlParameter[] {
      new SqlParameter("@id", id)
      };
    paras[0].value=id;
    上面的人说过了。你没给参数赋值
      

  9.   

    看看sqlhelper.ExecuteQuery里的代码
      

  10.   


                System.Data.SqlClient.SqlParameter[] para = new SqlParameter[2];
                para[0] = new SqlParameter();
                para[0].ParameterName = "@ElectionContent_Id";
                para[0].Value = ElectionContent_Id;
                para[0].DbType = System.Data.DbType.Int32;
                para[1] = new SqlParameter();
                para[1].ParameterName = "@user_id";
                para[1].Value = userId;
                para[1].DbType = System.Data.DbType.Int32;
                return DBHelper.GetSPData("GetOnline", para);
            /// <summary>
            /// 存储过程查询返回多个表
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="paramers"></param>
            /// <returns></returns>
            public static DataSet GetSPData(string sql, System.Data.IDataParameter[] paramers)
            {
                SqlCommand cmd = new SqlCommand(sql, Connection);
                cmd.CommandType = CommandType.StoredProcedure;
                foreach (System.Data.IDataParameter paramer in paramers)
                {
                    cmd.Parameters.Add(paramer);
                }
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                return ds;
            }我一般都是这么写的