从两个 SQL 表中选择并插入.C#

本文关键字:选择 插入 SQL 两个 | 更新日期: 2023-09-27 18:33:02

我的代码 dosent 工作。 请纠正我。

我想说的例子是从 (COlumn*( 中取 2 个值,其中....和 (COlumn*( 中的 2 个值,其中 ....

con.Open();
SqlCommand cmd = new SqlCommand
("INSERT INTO temp_rent(parts,size,color,quantities,barcode,name,mobile,code) select 
parts,size,color,quantities,barcode from inventory where barcode = ('" + textBox4.Text + "')
 select name,mobile,code from customermaster where code= '" + textBox1.Text + "')", con);
                    cmd.ExecuteNonQuery();
                    con.Close();

从两个 SQL 表中选择并插入.C#

这是我的方法:

首先在Visual Studio(2015(中,我添加了一个数据源。请注意,不同版本的 Visual Studio 有不同的添加数据源的方式。所以在VS2015中点击

  • 项目
  • 添加新的数据源数据库
  • 数据
  • 配置与数据库的连接
  • 选择表 您将使用的语言
  • 命名数据集(我的是SO_testDataSet(

完成后,您将有一个...项目中的 DataSet.xsd。双击它。

在这里,您将看到从数据库中导入的表。 右键单击 temp_rent 的标题,因为 您要创建一个将在末尾插入到temp_rent中的查询。

  • 查询
  • 在这里,您可以使用"使用 SQL 语句"或"创建新的存储过程"。我建议第二个,但为了简单起见,现在使用第一个。
  • 插入
  • 将以下内容粘贴到文本框中。如果您愿意,可以在查询构建器中检查它。

    INSERT INTO temp_rent
                     (parts, size, color, quantities, barcode, name, mobile, code)
    SELECT        i.parts, i.size, i.color, i.quantities, i.barcode, cm.name, cm.mobile, cm.code
    FROM            inventory AS i CROSS JOIN
                     customermaster AS cm
    WHERE        (cm.code = @code) AND (i.barcode = @barcode)
    
  • 命名你的查询(我的是插入查询(

完成,保存。在查询中,您可以看到存在交叉联接,因为库存和主客户群未通过列联接。这是一个简单的笛卡尔产品。您也可以使用FROM inventory, customermasterFROM inventory JOIN customermaster(因为ON是可选的(。我们还可以看到@code@barcode是参数化查询的占位符。

在代码中,您可以像这样使用添加的查询:

SO_testDataSetTableAdapters.temp_rentTableAdapter adapter = new SO_testDataSetTableAdapters.temp_rentTableAdapter();
// I assume that code and barcode are the type of int in the database.
adapter.InsertQuery(int.Parse(textBox1.Text), int.Parse(textBox4.Text));

如果文本框包含一些恶意字符串,则int.Parse将抛出异常,因为恶意字符串无法解析为 int(为了防御 sql 注入(。