C# 执行存储过程 传参失败 急!!!

thecityofsky 2010-03-18 11:49:14
今天写了个存储过程 联系插入数据,但是在代码里面执行的时候,传参总是失败,显示“过程 'Pro_UnitLabel' 需要参数 '@ProductName',但未提供该参数”但是我已经在command的Parameters信息里面发现了传入的参数,有那个兄弟知道的 帮帮忙 具体的主要代码如下:

存储过程代码
CREATE PROCEDURE [Pro_CheckUintLabel] 
@ProductName varchar(15),
@HANAWK varchar(2),
@Serialb int,
@Seriale int,
@WO varchar(12),
@RunCard varchar(12),
@YY char(2),
@Firmware varchar(15),
@Wafer varchar(20),
@Bin varchar(10),
@Dat datetime,
@EN varchar(6),
@x int=0,
@y int=0
as
begin
set @x=@Seriale-@Serialb+1
set @y =(select count(ProductName) from UnitLabel where Serial>=@Serialb and Serial<@Seriale)
if @x=@y
begin
return 1
end
else
begin
return 0
end

end
GO


执行存储过程代码

public void execsql(string ProcedureName,SqlParameter[] param)
{
con_open();
if (param != null)
{
cmd = new SqlCommand(ProcedureName, con);
foreach (SqlParameter parameter in param)
{ cmd.Parameters.Add(parameter); }
cmd.CommandType = CommandType.StoredProcedure;
try
{
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{

}
}
con.Close();
}



传入存储过程参数代码
        public SqlParameter[] getParam(UnitLabelInfo Item)
{
SqlParameter[] param ={
new SqlParameter("@ProductName",SqlDbType.VarChar,15,Item.ProductName),
new SqlParameter("@HANAWK",SqlDbType.VarChar,2,Item.HANAWK),
new SqlParameter("@Serialb",SqlDbType.Int,Item.Serialb),
new SqlParameter("@Seriale",SqlDbType.Int,Item.Seriale),
new SqlParameter("@WO",SqlDbType.VarChar,12,Item.WO),
new SqlParameter("@RunCard",SqlDbType.VarChar,12,Item.RunCard),
new SqlParameter("@YY",SqlDbType.Char,2,Item.YY),
new SqlParameter("@Firmware",SqlDbType.VarChar,15,Item.Firmware),
new SqlParameter("@Wafer",SqlDbType.VarChar,20,Item.Wafer),
new SqlParameter("@Bin",SqlDbType.VarChar,10,Item.Bin),
new SqlParameter("@Dat",SqlDbType.DateTime,8,Item.Dat),
new SqlParameter("@EN",SqlDbType.VarChar,6,Item.EN)
};
return param;
}
...全文
240 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-03-18
  • 打赏
  • 举报
回复
new SqlParameter("@x",SqlDbType.Int,8,0),
new SqlParameter("@y",SqlDbType.Int,6,0)
nali29 2010-03-18
  • 打赏
  • 举报
回复
断点检查一下 new SqlParameter("@ProductName",SqlDbType.VarChar,15,Item.ProductName),
里productname有没有赋到值,再检查一下传递的param参数
guojh021 2010-03-18
  • 打赏
  • 举报
回复
参数数量上要一样嘛·~
cjnkd 2010-03-18
  • 打赏
  • 举报
回复
加个默认值吧,可能是参数传的不全,参数有点多了吧,
myrroom 2010-03-18
  • 打赏
  • 举报
回复
要不你就给默认值,要不你就把参数传全了
whowhen21 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jocli 的回复:]
存储过程定义了十四个参数,param才传十二个啦 把另两个补齐 才对应的上嘛
[/Quote]
貌似....
JOCLI 2010-03-18
  • 打赏
  • 举报
回复
存储过程定义了十四个参数,param才传十二个啦 把另两个补齐 才对应的上嘛
wuxing2006 2010-03-18
  • 打赏
  • 举报
回复
你存储过程名写错了,看你代码
MicroDeviser 2010-03-18
  • 打赏
  • 举报
回复
你看下你传过来的param数组里是否有这个参数撒
扬沙子 2010-03-18
  • 打赏
  • 举报
回复
new SqlParameter("@ProductName",SqlDbType.VarChar,15,Item.ProductName),

里面的Item.ProductName这地方应该是显示列信息的,不是赋值

应该这样赋值 param[0].Value= Item.ProductName


gsq_0912 2010-03-18
  • 打赏
  • 举报
回复
顶起!
WTPMCheng 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nali29 的回复:]
断点检查一下 new SqlParameter("@ProductName",SqlDbType.VarChar,15,Item.ProductName),
里productname有没有赋到值,再检查一下传递的param参数
[/Quote]

传参的时候,要传参数名,也应该要为参数赋值的。。。
调试看看你的item.productname有没有值。。

我一般都是这样做的
sqlparameter[] parame = {new sqlparameter("参数名",类型),.....}
parame[0].value="参数值";
......

可以试试!!

compleat 2010-03-18
  • 打赏
  • 举报
回复
,显示“过程 'Pro_UnitLabel' 需要参数 '@ProductName',但未提供该参数”

CREATE PROCEDURE [Pro_CheckUintLabel] 


存储过程名称

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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