添加参数时查询不执行

本文关键字:执行 查询 参数 添加 | 更新日期: 2023-09-27 18:05:30

我使用OleDB提供程序访问数据库,在c#, VS2010中开发

我有一个Products表和Suppliers

当我调试这个代码时:

//open connection
con.Open();
//set command query for inserting a product
com2 = new OleDbCommand(@"INSERT INTO Products (ProductName,Model,Provider,Manufacturer,ReleasedDate,Quantity,SupplierID) 
VALUES (@name,@model,@provider,@manf,@date,@quantity,@supp)", con);
/* ADDING PARAMETERS TO THE COMMMAND */
com2.Parameters.AddWithValue("@name", textBox1.Text);
com2.Parameters.AddWithValue("@model", textBox2.Text);
com2.Parameters.AddWithValue("@provider", textBox4.Text);
com2.Parameters.AddWithValue("@manf", textBox5.Text);
com2.Parameters.AddWithValue("@date", DbType.DateTime).Value = dateTimePicker1.Value;
com2.Parameters.AddWithValue("@quantity", Convert.ToInt32(textBox6.Text));
//  com2.Parameters.AddWithValue("@price", Convert.ToInt32(textBox3.Text));
/* Getting the ID of the Supplier by his/her/it name and adding the value as a parameter */
com = new OleDbCommand("Select SupplierID from Suppliers WHERE SupplierName=@name",con);
com.Parameters.AddWithValue("@name",comboBox1.SelectedValue);
int str = (int)com.ExecuteScalar();
com2.Parameters.AddWithValue("@supp", str);
//INSERT EXECUTION
com2.ExecuteNonQuery();
MessageBox.Show("Product Added To Stock");
con.Close();

程序运行良好并执行查询,但是当i 取消

的注释时
com2.Parameters.AddWithValue("@price", Convert.ToInt32(textBox3.Text));

和编辑com2查询字符串为:

com2 = new OleDbCommand(@"INSERT INTO Products (ProductName,Model,Provider,Manufacturer,ReleasedDate,Quantity,SupplierID,Price) 
            VALUES (@name,@model,@provider,@manf,@date,@quantity,@supp,@price)", con);

程序在com2.ExecuteNonQuery();行崩溃,出现以下错误:

You cannot add or change a record because a related record is required in table 'Suppliers'.

指出:

  1. 如果你想知道为什么我想添加价格,这是因为我没有从第一个位置添加
  2. Products
  3. 中存在Price列
  4. 我删除了两个表中的所有记录
  5. 价格列类型:数字-长整数
  6. SupplierID是供应商表
  7. 中的主键
  8. 调试时,str值为4,与其中一个供应商的值相同

添加参数时查询不执行

尝试移动这一行:

com2.Parameters.AddWithValue("@price", Convert.ToInt32(textBox3.Text));

设置@Supp参数后,查看错误是否仍然存在

这里的问题很可能是由于您提供的作为@sup参数值的供应商ID不包含在供应商表(外键约束)中。是否有可能在不带price参数的查询字符串的运行和带price参数的查询字符串的运行之间输入的数据发生了变化?

"您试图执行一个可能违反相关表的引用完整性规则的操作。例如,如果您试图在一对多关系中的"many"表中更改或插入一条记录,并且该记录在"one"侧的表中没有相关记录,则会发生此错误。如果要添加或更改记录,首先要向"one"表中添加一条记录,该记录包含匹配字段的相同值。—Microsoft Office Support

改变这一行

com2 = new OleDbCommand(@"INSERT INTO Products (ProductName,Model,Provider,Manufacturer,ReleasedDate,Quantity,SupplierID,Price) 
        VALUES (@name,@model,@provider,@manf,@date,@quantity,@supp,@price)", con);

com2 = new OleDbCommand(@"INSERT INTO Products (ProductName,Model,Provider,Manufacturer,ReleasedDate,Quantity,Price,SupplierID) 
        VALUES (@name,@model,@provider,@manf,@date,@quantity,@price,@supp)", con);

您将price发送为@supp, supp发送为@price。顺序很重要。其他提供程序允许"按名称绑定",但不允许OleDb。

UPDATE:根据George t更正的查询