做了个简单的三层,向数据库中添加东西,用得存储过程,因为不太熟悉,所以一直出现问题,但是我却不知道究竟什么地方出现了问题!请教大家!
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',但未提供该参数。 请大家帮忙给看看怎么回事。
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',但未提供该参数。 请大家帮忙给看看怎么回事。
new SqlParameter("@id", id)
};
这句仔细看看
@id int
AS
BEGIN
select title,[content],createTime,caId from news where id=@id
END
这是存储过程。感觉SqlParameter[] paras = new SqlParameter[] {
new SqlParameter("@id", id)
};没错啊。
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
这个函数,看看这个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);
参数设置
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) {}
new SqlParameter("@id", id)
};
paras[0].value=id;
上面的人说过了。你没给参数赋值
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;
}我一般都是这么写的