过程需要参数“”但未提供该参数!!存储过程的问题!求救!
做了个简单的三层,向数据库中添加东西,用得存储过程,因为不太熟悉,所以一直出现问题,但是我却不知道究竟什么地方出现了问题!请教大家!
DAL层代码:
public int InsertNews(Model.articlemodel SingleNews) { string procname = "dbo.addnews"; SqlParameter[] prames ={ new SqlParameter("@title",SqlDbType.NVarChar,50), new SqlParameter("@news_time",SqlDbType.DateTime), new SqlParameter("@news_from",SqlDbType.NVarChar,50), new SqlParameter("@news_class",SqlDbType.NVarChar,50), new SqlParameter("@news_content",SqlDbType.NVarChar,200)}; prames[0].Value = SingleNews.title; prames[1].Value = SingleNews.news_time; prames[2].Value = SingleNews.news_from; prames[3].Value = SingleNews.news_class; prames[4].Value = SingleNews.news_content; int intResult = DBUtility.DataBase.RunExecute(procname,prames);//后面注释部分 return intResult; // public static int RunExecute(string procName, SqlParameter[] prames) { SqlConnection conn = DBHelp.GetConn(); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = conn; cmd.CommandText = procName; conn.Open(); int intResult = cmd.ExecuteNonQuery(); conn.Close(); return intResult; } }public bool InsertNews(string title,DateTime news_time,string news_from,string news_class,string news_content) { bool Flage = false; Dal.articledal ee = new Dal.articledal(); Model.articlemodel SingleNews = new Model.articlemodel(); SingleNews.title = title; SingleNews.news_time = news_time; SingleNews.news_from = news_from; SingleNews.news_class = news_class; SingleNews.news_content = news_content; int intresult=ee.InsertNews(SingleNews); if (intresult > 0) { Flage = true; } return Flage; }protected void BtnAddNews_Click(object sender, EventArgs e) { string title = this.Txttitle.Text; DateTime news_time = System.DateTime.Now; string news_from = this.Txtnewsfrom.Text; string news_class = this.DropDownList1.SelectedValue; string news_content = this.Txtnewscontent.Text; Bll.articlebll bll = new Bll.articlebll(); bool s=bll.InsertNews(title,news_time,news_from,news_class,news_content); if (s) { LabMessage.Text = "添加新闻成功!"; } else { LabMessage.Text = "抱歉,新闻添加失败!"; } }
RETURN
(应该是参数没有传递给存储过程,但是我看了半天也没有发现究竟哪里的代码出现了问题,请帮忙看一下,你的举手之劳,就能解决我好几天的困惑!谢谢)
[解决办法]
把 dbo.去掉 试试
[解决办法]
好像没错哦 看不出来
[解决办法]
{
SqlConnection conn = DBHelp.GetConn();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.CommandText = procName;
conn.Open();
int intResult = cmd.ExecuteNonQuery();
conn.Close();
return intResult;
}
没见着你的参数传在哪里,检查你的 prames传值
[解决办法]
cmd.CommandText = procName;
proname="ado.addnew"
是不是大小写出问题了?
[解决办法]
SqlParameter[] prames ={ new SqlParameter("@title",SqlDbType.NVarChar,50), new SqlParameter("@news_time",SqlDbType.DateTime), new SqlParameter("@news_from",SqlDbType.NVarChar,50), new SqlParameter("@news_class",SqlDbType.NVarChar,50), new SqlParameter("@news_content",SqlDbType.NVarChar,200)}; prames[0].Value = SingleNews.title; prames[1].Value = SingleNews.news_time; prames[2].Value = SingleNews.news_from; prames[3].Value = SingleNews.news_class; prames[4].Value = SingleNews.news_content;
[解决办法]
应该是大小写出问题了
最前面是这样声明的 string procname = "dbo.addnews";
可引用的时候是这样 cmd.CommandText = procName;
楼主你改下试试?
[解决办法]
错了。public static int RunExecute(string procName, SqlParameter[] prames)
{
SqlConnection conn = DBHelp.GetConn();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.CommandText = procName;
conn.Open();
if(prames!=null && prames.length>0) //我加的代码
{
foreach(SqlParameter para in prames)
{
cmd.Parameters.Add(para);
}
}
int intResult = cmd.ExecuteNonQuery();
conn.Close();
return intResult;
}
[解决办法]
在RunExecute 这个静态方法里。应该显示的把参数绑定到cmd上
if(prames!=null && prames.length>0)
{
foreach(SqlParameter para in prames)
{
cmd.Parameters.Add(para);
}
}
[解决办法]
执行这句之前(int intResult = cmd.ExecuteNonQuery();/////运行到这里就出问题了。)
得把参数传个SqlCommand啊
cmd.Parameters.Add();
[解决办法]
用楼上的方法添加参数试试?
[解决办法]
报的错误是什么
[解决办法]
是的
if(prames!=null && prames.length>0)
{
foreach(SqlParameter para in prames)
{
cmd.Parameters.Add(para);
}
}
先把参数绑定到cmd中 ,再执行 cmd.ExecuteNonQuery(); 一定没错
[解决办法]
这个是我的dbcenter里的代码:
public string OutPutProc(string procName, SqlParameter[] sp)
{
try
{
conn = Getconn();
conn.Open();
cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = procName;
cmd.Connection = conn;
if (sp != null && sp.Length > 0)
{
foreach (SqlParameter para in sp)
{
cmd.Parameters.Add(para);
}
}
cmd.ExecuteNonQuery();
string allmoney = string.Empty;
if (sp != null && sp.Length > 0)
{
for (int i = 0; i < sp.Length; i++)
{
if (sp[i].Direction == ParameterDirection.Output)
{
allmoney = Convert.ToString(sp[i].Value);
}
}
}
return allmoney;
}
catch (Exception)
{
throw;
}
finally
{
conn.Close();
}
}
给你参考下
[解决办法]
上面是输出参数的存储过程,这个只是不带输出参数的
public int RunProc(string procName, SqlParameter[] sp)
{
int count = 0;
try
{
conn = Getconn();
conn.Open();
cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = procName;
cmd.Connection = conn;
foreach (SqlParameter para in sp)
{
cmd.Parameters.Add(para);
}
count = cmd.ExecuteNonQuery();
}
catch (Exception)
{
throw;
}
finally
{
conn.Close();
}
return count;
}
[解决办法]