C#存储过程函数需要未提供的参数'@id'

时间:2018-08-21 15:26:20

标签: c# sql-server winforms

enter image description here

我遇到了这个错误,尽管我知道已经被问过很多次了,但我还是尝试研究我的错误,但仍然没有任何效果。

我的代码有错误吗?我希望有人能够在这件事上提供帮助。我已经坚持了一个星期。我尝试了其他开发人员的不同意见,但仍然没有解决办法。

存储过程:

ALTER PROCEDURE dbo.AddProduct

@ID int,
@Image varbinary(max),
@Supplier varchar(50),
@Codeitem varchar(50),
@Itemdescription varchar(50),   
@Date varchar(50),
@Quantity varchar(50),
@Unitcost varchar(50),
@ADD nvarchar(50)

AS
BEGIN
        IF @ADD = 'Insert'
INSERT INTO  dbo.employee_product
(
Image,
Supplier,
Codeitem,
Itemdescription,
Date,
Quantity,
Unitcost    
)
VALUES
(
@Image,
@Supplier,
@Codeitem,
@Itemdescription,
@Date,
@Quantity,
@Unitcost   
)

END

我的代码:

        byte[] image = null;
        var stream = new FileStream(this.txt_path.Text, FileMode.Open, FileAccess.Read);
        var read = new BinaryReader(stream);
        image = read.ReadBytes((int)stream.Length);
        using (var con = SQLConnection.GetConnection())
        {


            if (string.IsNullOrEmpty(cbox_supplier.Text) || string.IsNullOrEmpty(txt_code.Text) || string.IsNullOrEmpty(txt_item.Text) || string.IsNullOrEmpty(txt_quantity.Text) || string.IsNullOrEmpty(txt_cost.Text))
            {
                MetroMessageBox.Show(this, "Please input the Required Fields", "System Message:", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                var selectCommand = new SqlCommand("AddProduct", con);
                selectCommand.CommandType = CommandType.StoredProcedure;
                selectCommand.Parameters.AddWithValue("@ADD", "Insert");
                selectCommand.Parameters.AddWithValue("@ID",SqlDbType.Int ).Value = 0;
                selectCommand.Parameters.AddWithValue("@Image", image);
                selectCommand.Parameters.AddWithValue("@Supplier", cbox_supplier.Text);
                selectCommand.Parameters.AddWithValue("@Supplier", cbox_supplier.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Codeitem", txt_code.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Itemdescription", txt_item.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Date", txt_date.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Quantity", txt_quantity.Text.Trim());
                selectCommand.Parameters.AddWithValue("@Unitcost", txt_cost.Text.Trim());
                selectCommand.ExecuteNonQuery();
                MessageBox.Show("Added successfully", "SIMS", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                _view._product();

            }

        }

2 个答案:

答案 0 :(得分:2)

读取answer到另一个陈述它的问题:

  

在将SqlParameterCollection.Add方法的此重载用于   指定整数参数值。由于此重载采用Object类型的值,   您必须在整数值为零时将整数值转换为Object类型,因为   以下C#示例演示。

parameters.Add("@pname", Convert.ToInt32(0)); 
  

如果不执行此转换,则编译器会假定您正在尝试调用   SqlParameterCollection.Add(字符串,SqlDbType)重载。

这很可能是您的问题。

答案 1 :(得分:0)

您要在此处的C#代码中添加十个参数:

var selectCommand = new SqlCommand("AddProduct", con);
selectCommand.CommandType = CommandType.StoredProcedure;
selectCommand.Parameters.AddWithValue("@ADD", "Insert");
selectCommand.Parameters.AddWithValue("@ID",0);
selectCommand.Parameters.AddWithValue("@Image", image);
selectCommand.Parameters.AddWithValue("@Supplier", cbox_supplier.Text);
selectCommand.Parameters.AddWithValue("@Supplier", cbox_supplier.Text.Trim()); // <== duplicate?
selectCommand.Parameters.AddWithValue("@Codeitem", txt_code.Text.Trim());
selectCommand.Parameters.AddWithValue("@Itemdescription", txt_item.Text.Trim());
selectCommand.Parameters.AddWithValue("@Date", txt_date.Text.Trim());
selectCommand.Parameters.AddWithValue("@Quantity", txt_quantity.Text.Trim());
selectCommand.Parameters.AddWithValue("@Unitcost", txt_cost.Text.Trim());

但是您的过程仅需要9个参数,我想您可能已经复制了Supplier参数?