【发布时间】:2019-02-26 21:28:36
【问题描述】:
不知道如何解决。
所以我有一个来自 MS SQL Server 的导入表(屏幕截图)Patient(#1)和Diagnoz(诊断)(#2)。第一个表包含患者数据的完整列表和 id_diagnoz 的外键,其中指示 Stage 和 Name_diagnoz。
表(#3)是一个现成的选项,用于输出数据而没有不必要的列,但这不是问题。"select Pacient.id_patient, Pacient.Name, Pacient.Surname, Pacient.Middle_name, Pacient.Age, Pacient.Legal_address_Clinic, Diagnoz.Name_diagnoz, Diagnoz.Stage FROM Pacient JOIN Diagnoz ON Diagnoz.id_diagnoz = Pacient.id_diagnoz";这很好用。
问题是,当从文本框和组合框填写数据时,我需要首先从表中生成一个 id_diagnoz (# 2),然后将其他信息添加到患者表中(#1)。但是,我无法做到这几个小时,因为即使是错误也没有导致。因此,我决定将 id_diagnoz 单独添加到空表(# 4)中,以确保我的查询正常工作。 请帮我处理这个 id_diagnoz 和其他放入患者表的数据。
private void button5_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection("Data Source=DESKTOP-R551818\\SQLEXPRESS;Initial Catalog=Fond;Integrated Security=True"))
{
SqlDataAdapter comm = new SqlDataAdapter("SELECT id_diagnoz FROM Diagnoz WHERE Name_diagnoz = '" + comboBox2.Text + "' and Stage = '" + comboBox3.Text + "'" +
"INSERT INTO Pacient (Name, Surname, Middle_name, Column__Passport, Legal_address_Clinic, Age)" +
" VALUES (@Name, @Surname, @Middle, @Passport, @AddresClinic, @Age) ", conn);
comm.SelectCommand.Parameters.AddWithValue("@Name", textBox3.Text);
comm.SelectCommand.Parameters.AddWithValue("@Surname", textBox4.Text);
comm.SelectCommand.Parameters.AddWithValue("@Middle", textBox5.Text);
comm.SelectCommand.Parameters.AddWithValue("@Passport", maskedTextBox1.Text);
comm.SelectCommand.Parameters.AddWithValue("@AddresClinic", comboBox1.Text);
comm.SelectCommand.Parameters.AddWithValue("@Age", textBox7.Text);
DataSet ds = new DataSet();
comm.Fill(ds);
//da.Fill(ds, "Pacient");
dataGridView2.DataSource = ds.Tables[0];
conn.Close();
conn.Open();
}}
【问题讨论】:
-
您应该与我们分享您遇到的错误,但快速检查让我发现您在查询中的
INSERT关键字之前缺少一个空格:" INSERT INTO Pacient。 -
您应该参数化所有谓词。当您像这样将文本框值插入字符串的中间时,您破坏了 sql 注入保护。您还应该避免使用 AddWithValue,因为它有时会导致数据类型错误。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/… 最后但同样重要的是,给你的控件起一个名字,告诉你它是什么。 TextBox1 没用。当屏幕上有 20 个文本框并且需要获取 LastName 时,您必须查看设计器。
标签: c# sql-server winforms