我希望将数据保存在2个表中,并使用不同的数据。
表主数据:KD001(PK),名称
表中的示例PurchaseReuqisition包含:PR001(PK),KD001(FK),日期表DetailPurchaseRequisition包含:PR001为(PK,FK),KD001为(PK,FK),数量
当我单击添加表时,DetailPurchaseRequisition可以包含重复的id,例如: PR001,KD002
PR001,KD004
这是我的代码:
public void cekdup2()
{
for (int row = 0; row < dataGridView2.Rows.Count; row++)
{
for (int col = 0; col < dataGridView2.Columns.Count; col++)
{
if (dataGridView2.Rows[row].Cells[col].Value != null &&
dataGridView2.Rows[row].Cells[col].Value.Equals(txtIdBarang.Text.Trim()))
{
MessageBox.Show("cant add same item!");
return;
}
}
}
}
和按钮添加:
private void btnAdd_Click(object sender, EventArgs e)
{
cekdup2();
if (txtIdBarang.Text == "")
{
MessageBox.Show("choose item!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (numQty.Value == 0)
{
MessageBox.Show("Qty min 1!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
con.executeUpdate("INSERT INTO DetailPurchaseRequisition VALUES('" + txtIdPermintaanPembelian.Text + "','" + txtIdBarang.Text + "', '" + numQty.Value + "')");
dataGridView2.DataSource = con.executeQuery("SELECT * FROM DetailPurchaseRequisition");
}
}
但是当我点击添加时,theree的某些错误, 如果我填写PR004,它可能是错误的,因为在表PurchaseRequisition中找不到, 但如果我像这个例子一样保存它们:
con.executeUpdate("INSERT INTO DetailPurchaseRequisition VALUES('" + IdPR.Text + "','" + txtIdBarang.Text + "', '" + numQty.Value + "')");
con.executeUpdate("INSERT INTO PruchaseRequisition VALUES('" + IdPR.Text + "','" + txtIdBarang.Text + "', '" + numQty.Value + "')");
它将循环保存表PurchaseRequisition吗? 我只想为表PurchaseRequisition节省1次,但可以在表详细信息中保存超过1个数据。
你可以帮我吗? 抱歉我的英文不好答案 0 :(得分:1)
您需要设计一个系统来识别新的或现有的主表条目。步骤将是这样的:主键是否存在于主表中?如果没有插入它。然后插入详细记录。
可能可以在C#内存中保存整个主表的副本并在客户端中执行逻辑,但如果表很大则可能存在风险。我建议一个存储过程来完成数据库中的所有操作。您的要求非常简单 - 您事先知道主记录主键,因此您不需要在INSERT之后获取它;并且您一次只添加一条详细记录。
请参阅以下链接:
答案 1 :(得分:1)
有几条评论可以帮助您找出问题所在。不要按位置执行insert语句。这将使调试这些类型的问题更容易,并防止数据插入错误的列 Insert Into DetailPurchaseRequisition(PR001,KD001,qty)值('“+ IdPR.Text +”','“+ txtIdBarang.Text +”','“+ numQty.Value +”')“);
根据我的判断,您似乎已经完成了PurchaseRequisition的保存,并且想要保存子记录。由于数据库中不存在父记录,您似乎收到错误。
您需要确保在保存PurchaseRequsition之后刷新内存中的对象。一旦该id存在于内存中,您就可以引用它并在随后的insert语句中填充它。