【问题标题】:auto increment foreign key自增外键
【发布时间】:2018-03-09 05:33:38
【问题描述】:
  • 表 1 - 项目
  • 表 2 - sale(具有自动递增主键)
  • 表3 - sale_item(该表的主键是表1的itemId和表2的自增saleID)

如何使用自动增量 saleID 更新第三个表?

我下面的代码不起作用。

string query1 = "Update item set qty = '" + final + "'where itemId ='" + item + "'";

int rows = db.SaveUpdateDelete(query1);
DateTime d = DateTime.Now;
int day = d.Day;
int month = d.Month;
int year = d.Year;

string dt = year + "/" + month + "/" + day;

string query2 = "Insert into sale (empID,date) values ('" + usename + ",'" + dt + "')";
int rows1 = db.SaveUpdateDelete(query2);

string query3 = "Insert into sale_item (itemId, qty, unit_price) values ('" + item + "','" + qty + "','" + price + "'";
int rows2 = db.SaveUpdateDelete(query3);

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
  • “我下面的代码不起作用。”请比这更精确一点。例外?错误?你的电脑爆炸了吗?
  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。
  • @MongZhu sql 语法不正确。

标签: c# mysql sql


【解决方案1】:

在第二个表销售中完成插入后,从销售表中执行前 1 个 基于身份证。 从该输出中获取销售 ID,插入到第三个表中。确实使用虚拟值执行了下面的代码并且它有效。

        var conn = new SqlConnection("connection string");
        conn.Open();
        SqlCommand comm = new SqlCommand("Update item set qty = '" + 30 + "'where itemId ='" + 1 + "'",conn);
        comm.ExecuteNonQuery();

        DateTime d = DateTime.Now;
        int day = d.Day;
        int month = d.Month;
        int year = d.Year;

        string dt = year + "/" + month + "/" + day;
        string username = "jyothi";
        SqlCommand query2 = new SqlCommand("Insert into sale (empID,date1) values ('" + 22 + "','" + dt + "')",conn);
        query2.ExecuteNonQuery();

        int saleid=0;
        SqlCommand query3 = new SqlCommand("select top 1 id from sale order by id desc",conn);
        var dreader = query3.ExecuteReader();
        if (dreader.Read())
        {
            saleid = Convert.ToInt32(dreader[0].ToString());

        }
        dreader.Close();


        SqlCommand query4 = new SqlCommand("Insert into saleitem (saleid,itemId, qty, price) values ('" + saleid + "','" + 1 + "','" + 20 + "','" + 25 + "')", conn);
        query4.ExecuteNonQuery();

【讨论】:

  • 程序运行的第二个实例是如何发生的,select top 1 返回最上面的记录不是吗?
  • 在第二种情况下,我相信您正在插入具有新 ID 权限(自动增量)的销售表?如果不是这种情况,您将更新您知道的当前 saleid。这可以给第三个查询。请纠正我/提供更多细节。
猜你喜欢
  • 2015-06-30
  • 2016-09-06
  • 2018-03-21
  • 2011-04-06
  • 2016-04-22
  • 1970-01-01
  • 2015-11-13
  • 2014-04-21
  • 1970-01-01
相关资源
最近更新 更多