今天写了个存储过程 联系插入数据,但是在代码里面执行的时候,传参总是失败,显示“过程 '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
endend
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;
}
@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
endend
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;
}
里productname有没有赋到值,再检查一下传递的param参数
new SqlParameter("@y",SqlDbType.Int,6,0)
存储过程名称
传参的时候,要传参数名,也应该要为参数赋值的
调试看看你的item.productname有没有值。。我一般都是这样做的
sqlparameter[] parame = {new sqlparameter("参数名",类型),.....}
parame[0].value="参数值";
......可以试试!!