今天写了个存储过程 联系插入数据,但是在代码里面执行的时候,传参总是失败,显示“过程 '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;
        }

解决方案 »

  1.   

    你看下你传过来的param数组里是否有这个参数撒
      

  2.   

    存储过程定义了十四个参数,param才传十二个啦 把另两个补齐 才对应的上嘛
      

  3.   

    断点检查一下                new SqlParameter("@ProductName",SqlDbType.VarChar,15,Item.ProductName),
    里productname有没有赋到值,再检查一下传递的param参数
      

  4.   

       new SqlParameter("@x",SqlDbType.Int,8,0),
       new SqlParameter("@y",SqlDbType.Int,6,0)
      

  5.   

    ,显示“过程 'Pro_UnitLabel' 需要参数 '@ProductName',但未提供该参数”CREATE PROCEDURE [Pro_CheckUintLabel] 
    存储过程名称
      

  6.   


    传参的时候,要传参数名,也应该要为参数赋值的
    调试看看你的item.productname有没有值。。我一般都是这样做的
    sqlparameter[] parame = {new sqlparameter("参数名",类型),.....}
    parame[0].value="参数值";
    ......可以试试!!
      

  7.   

    new SqlParameter("@ProductName",SqlDbType.VarChar,15,Item.ProductName),里面的Item.ProductName这地方应该是显示列信息的,不是赋值应该这样赋值 param[0].Value= Item.ProductName