当前位置:编程学习 > C#/ASP.NET >>

过程需要参数,但未提供参数。

做了个简单的三层,向数据库中添加东西,用得存储过程,因为不太熟悉,所以一直出现问题,但是我却不知道究竟什么地方出现了问题!请教大家!
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',但未提供该参数。 请大家帮忙给看看怎么回事。
--------------------编程问答-------------------- SqlParameter[] paras = new SqlParameter[] {
  new SqlParameter("@id", id)
  };
这句仔细看看。。。 --------------------编程问答-------------------- http://zhidao.baidu.com/question/92660743.html --------------------编程问答-------------------- 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)
  };没错啊。
--------------------编程问答-------------------- 是不是你传进去的是字符串数据? --------------------编程问答-------------------- @id没生命吧?declear? --------------------编程问答-------------------- 错了,传进去貌似不要declear的 --------------------编程问答-------------------- 存储过程没问题,问题应该出在你的ID往里传的地方,你应该单步调试,进入
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
这个函数,看看这个id到底传进去没有 --------------------编程问答-------------------- 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);  --------------------编程问答-------------------- 检查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) {}

--------------------编程问答-------------------- 看不出问题所在。
调式 --------------------编程问答-------------------- up
我也看不出问题来。
重新生成看看吧。 --------------------编程问答-------------------- 顶






--------------------编程问答--------------------
引用 3 楼 xingtaineiqiu 的回复:
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("……
  很明显的调用存储过程的时候没把那参数传进去吧 --------------------编程问答-------------------- SqlParameter[] paras = new SqlParameter[] {
  new SqlParameter("@id", id)
  };
paras[0].value=id;
上面的人说过了。你没给参数赋值。。。 --------------------编程问答-------------------- 看看sqlhelper.ExecuteQuery里的代码 --------------------编程问答--------------------
引用楼主 xingtaineiqiu 的回复:
在运行过程中老提示说:过程 'news_selectById' 需要参数 '@id',但未提供该参数。 请大家帮忙给看看怎么回事。


@id的值为NULL~
--------------------编程问答-------------------- 会不会是你的传进去的数据类型导致的出错 --------------------编程问答--------------------

            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;
        }

我一般都是这么写的 --------------------编程问答-------------------- --------------------编程问答-------------------- 跟一下代码吧,传值出问题了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,