如何使用winforms c#在数据库中的多个表中插入记录

时间:2011-09-28 19:48:49

标签: c#

我有一个我在这里附加的winform ..当我在Customer表中插入记录时,我还想在我的数据库中的orderlineitems表中添加记录,其中也将插入Order表中的记录。 我已在Customer表中插入记录,但是当我在OrderLineItems表中插入记录时,它显示错误。

我还想问一下,我的数据库中的OrderLineItems表包含以下列:

  1. ID(PK)
  2. 的OrderID(PK)
  3. 数量
  4. 特殊
  5. 价格
  6. 状态
  7. 在我的表单上,我只有数量,特定和费率字段,我可以从中获取其值,但我的winform上没有Status和Orderid值。我如何获得status和orderId的值呢?

    我的代码是:

    private void buttonInsert_Click(object sender, EventArgs e)
        {
            string SQL = String.Format("Insert into Customer values ('{0}','{1}','{2}')", textBoxName.Text, textBoxContactNo.Text, textBoxAddress.Text);
            //string SQL1 = String.Format("Insert into Order values ({0},'{1}','{2}',{3})",);
            DataManagementClass dm = new DataManagementClass();
    
        int result = dm.ExecuteActionQuery(SQL);
        if (result > 0)
        {
    
            for (int i = 0; i < recordsDataGridView.RowCount ; i++)
            {
                string query = String.Format("Insert into OrderLineItems values({0},'{1}','{2}','{3}',{4})",7,QuantityColumn, ParticularColumn, RatesColumn,1);
                dm.ExecuteActionQuery(query);
            }
            //string query = String.Format("Insert into OrderLineItems values ('{0}','{1},'{2}'
    
        }
    

    我在这里做错了什么。请指导我正确的方法。 感谢名单..  WinForm Image

2 个答案:

答案 0 :(得分:2)

建议一些增强功能,以使您的业务逻辑正常运行和维护:

  • 为数据库中的CreateCustomerCreateLineItem例程编写存储过程。
  • 使用SqlCommand及其Parameters集合。停止你正在做的任何事情并防止SQL注入。
  • 从按钮点击事件中删除所有此代码。
  • 创建CreateCustomerCreateLineItems等新方法。从按钮单击处理程序方法调用这些方法。
 private void buttonInsert_Click(object sender, EventArgs e)
 {
   int result = CreateCustomer(textBoxName.Text.Trim(),
                               textBoxContactNo.Text.Trim(),
                               textBoxAddress.Text.Trim());
    if (result > 0)
    {
       foreach(var row in recordsDataGridView.Rows)
       {
           CreateLineItem(quantity, particulars, rates);
       }
    }

答案 1 :(得分:1)

您正在插入如下值:'{1}','{2}','{3}'

这导致我假设您正在插入字符串值 如果字符串值中存在叛逆,则会导致语法错误 试试

yourstring.replace("'", "''") 

论点。


另外,请像p.campbell建议的那样..
使用参数来防止SQL注入。
有人可能会利用你代码的开放安全漏洞。