首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2012-04-28 
过程需要参数“”但未提供该参数!!存储过程的问题!求救!做了个简单的三层,向数据库中添加东西,用得存储过程,

过程需要参数“”但未提供该参数!!存储过程的问题!求救!
做了个简单的三层,向数据库中添加东西,用得存储过程,因为不太熟悉,所以一直出现问题,但是我却不知道究竟什么地方出现了问题!请教大家!

DAL层代码:

C# code
 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层:
C# code
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层:
C# code
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
(应该是参数没有传递给存储过程,但是我看了半天也没有发现究竟哪里的代码出现了问题,请帮忙看一下,你的举手之劳,就能解决我好几天的困惑!谢谢)

[解决办法]
把 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"
是不是大小写出问题了?
[解决办法]

C# code
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;
}
[解决办法]

探讨
cmd.CommandText = procName;
proname="ado.addnew"
是不是大小写出问题了?

[解决办法]
探讨
int intResult = cmd.ExecuteNonQuery();/////运行到这里就出问题了。引用:
        {
            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.CommandType = CommandType.StoredProcedure;
[解决办法]
我楼上说的对。
为什么我会没看见cmd.CommandType = CommandType.StoredProcedure;这句呢?
汗!!!!!!!!!!!!!!!!
[解决办法]
if(prames!=null && prames.length>0) 

foreach(SqlParameter para in prames) 

cmd.Parameters.Add(para); 



加这个。慌张.....
[解决办法]
上面的是对的 
 你都没把sqlparameter的值放到sqlCommand里面 
 

[解决办法]
参数没传。。。

你只声明了而已

热点排行