过程需要参数“”但未提供该参数!!存储过程的问题!求救!

gaoxing_1985007 2009-11-12 01:54:13
做了个简单的三层,向数据库中添加东西,用得存储过程,因为不太熟悉,所以一直出现问题,但是我却不知道究竟什么地方出现了问题!请教大家!

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


}


BLL层:
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;
}


WEB层:
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 = "抱歉,新闻添加失败!";
}

}


存储过程如下:
ALTER PROCEDURE dbo.addnews

(
@title nvarchar(50)=erererrwrwer,
@news_time datetime,
@news_from nvarchar(50)=dgdgdgdfg,
@news_class nvarchar(50)=dfdgdgfgfg,
@news_content nvarchar(200)=fgggggggg
)

AS
insert into article(title,news_time,news_from,news_class,news_content) values(@title,@news_time,@news_from,@news_class,@news_content)
RETURN
(应该是参数没有传递给存储过程,但是我看了半天也没有发现究竟哪里的代码出现了问题,请帮忙看一下,你的举手之劳,就能解决我好几天的困惑!谢谢)
...全文
896 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
gotopause 2012-04-13
  • 打赏
  • 举报
回复
我也遇到了!一同求解答!
boois 2011-09-18
  • 打赏
  • 举报
回复
Model.articlemodel SingleNews
有值为null
lcd0413 2010-03-23
  • 打赏
  • 举报
回复
楼主问题解决了吗?我也遇到此问题了,现在还在查原因。。
加油馒头 2009-11-12
  • 打赏
  • 举报
回复
参数没传。。。

你只声明了而已
throwboy1989 2009-11-12
  • 打赏
  • 举报
回复
上面的是对的
你都没把sqlparameter的值放到sqlCommand里面

dotnet201 2009-11-12
  • 打赏
  • 举报
回复
if(prames!=null && prames.length>0)
{
foreach(SqlParameter para in prames)
{
cmd.Parameters.Add(para);
}
}

加这个。慌张.....
yangk2511 2009-11-12
  • 打赏
  • 举报
回复
我楼上说的对。
为什么我会没看见cmd.CommandType = CommandType.StoredProcedure;这句呢?
汗!!!!!!!!!!!!!!!!
yangk2511 2009-11-12
  • 打赏
  • 举报
回复
是不是没加执行类型哦?
cmd.CommandType = CommandType.StoredProcedure;
还想懒够 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gaoxing_1985007 的回复:]
int intResult = cmd.ExecuteNonQuery();/////运行到这里就出问题了。引用 3 楼 jjkk168 的回复:
        {
            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传值

[/Quote]

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


楼主啊,你的这个函数里面虽说是传入了prames,但你没有使用。也就是说你在前端虽说赋了值,但你一直就没有传给后台,所以就报错
ljjwf 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tz6722033 的回复:]
cmd.CommandText = procName;
proname="ado.addnew"
是不是大小写出问题了?
[/Quote]

修改下看看
dotnet201 2009-11-12
  • 打赏
  • 举报
回复
上面是输出参数的存储过程,这个只是不带输出参数的
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;
}
dotnet201 2009-11-12
  • 打赏
  • 举报
回复
这个是我的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();
}

}

给你参考下
dotnet201 2009-11-12
  • 打赏
  • 举报
回复
是的
if(prames!=null && prames.length>0)
{
foreach(SqlParameter para in prames)
{
cmd.Parameters.Add(para);
}
}
先把参数绑定到cmd中 ,再执行 cmd.ExecuteNonQuery(); 一定没错
阿非 2009-11-12
  • 打赏
  • 举报
回复
报的错误是什么
chens1988 2009-11-12
  • 打赏
  • 举报
回复
用楼上的方法添加参数试试?
「已注销」 2009-11-12
  • 打赏
  • 举报
回复
执行这句之前(int intResult = cmd.ExecuteNonQuery();/////运行到这里就出问题了。)
得把参数传个SqlCommand啊

cmd.Parameters.Add();
dotnet201 2009-11-12
  • 打赏
  • 举报
回复
在RunExecute 这个静态方法里。应该显示的把参数绑定到cmd上

if(prames!=null && prames.length>0)
{
foreach(SqlParameter para in prames)
{
cmd.Parameters.Add(para);
}
}
dotnet201 2009-11-12
  • 打赏
  • 举报
回复
错了。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;



}

chens1988 2009-11-12
  • 打赏
  • 举报
回复
应该是大小写出问题了
最前面是这样声明的 string procname = "dbo.addnews";
可引用的时候是这样 cmd.CommandText = procName;

楼主你改下试试?
草根醉秋意 2009-11-12
  • 打赏
  • 举报
回复

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;


检查存储过程里的参数是否跟这里的一样,并且每个参数是否都有值而不是null。
加载更多回复(7)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧