如何向关系型数据库插入数据?

3
我有三个 Microsoft SQL Server 表格,分别为: 这三个表格是相关的。
我需要将数据插入到 培训 表中,这一点我可以做到。
问题在于,只知道客户名称,如何将客户表的 CustomerID 列插入到培训表中。
我创建了一个单独的类,因为我将在我的应用程序中经常使用它。
 public void UpdateDatabase(string sql_query)
 {
        using (SqlConnection conn = new SqlConnection(connection_string))
        {
            using (SqlCommand comm = new SqlCommand(sql_query, conn))
            {
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
            }
        }
    }

这是我的主类,用于更新我的数据库。
在我的按钮单击事件中,我有以下代码。
 private void btnSave_Click(object sender, EventArgs e)
 {
        DB NewJob = new DB();

        if (TabControl1.SelectedTab == TabControl1.TabPages["TPTraining"])//If TPTraiing Tab is selected
            {
                try
                {
                    string Customer = TPTcboCustomer.Text;
                    string Product = TPTcboProduct.Text;
                    DateTime DemoDate = TPTdtpDate.Value.Date;
                    string EndResult = TPTtxtEndResult.Text;

                    NewJob.UpdateDatabase("INSERT INTO TrainingDemos(CustomerID, ProductID, DemoDate, EndResult)VALUES('" + Customer + "','" + Product + "','" + DemoDate + "','" + EndResult + "')");
                    MessageBox.Show("Training/Demo Saved Sussesfully");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

Customer 变量保存了我从客户表中获取的客户名称。我需要将客户ID插入到培训表中,而不是插入客户名称。

string Customer = TPTcboCustomer.Text;

当表单加载时,TPTcboCustomer组合框控件会从客户表中检索所有客户名称。
简而言之,我只知道客户名称,如何将CustomerID插入培训表中。

5
SQL注入警告 - 不应将SQL语句串联在一起,而应使用参数化查询来避免SQL注入。 - marc_s
INSERT INTO TrainingDemos (...) VALUES ((SELECT CustomerId FROM Customer WHERE name = @CustomerName), @ProductId,...) - adrianm
1个回答

1
您需要进行另一个查询以获取CustomerID。一旦获得,就可以进行插入操作。
我的意思是,无论如何,您都需要验证它是否是真实的客户,对吗?
当有有限数量的选项可供选择时,我通常更喜欢用下拉菜单(或类似字段)填充要选择的客户。个人而言,我会执行初始查询,将所有客户引入并使用这些客户对象填充下拉菜单。然后,您只需使用所选项目的对象信息进行插入操作。
将“Customer”设置为强类型:
public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Other properties as desired

    public override string ToString()
    {
        return Name ?? "<No Name>";
    }
}

一旦你拥有了这个,读入所有的客户,并使用你的Customer对象列表填充下拉框。使用ToString()方法将显示客户名称在下拉框中。然后你只需要执行以下操作:
Customer customer = (Customer)TPTcboCustomer.SelectedItem;

然后,BLAM-O,你就拥有了所有需要进行插入的客户信息。

还有另一种表单可以将客户添加到客户表中。下拉组合框从客户表中获取客户名称,并且不允许编辑。谢谢,我打算尝试另一个查询,应该能完成工作。 - Gerry Humphreys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接