回答 在Windows表单中设置主键

编纂

成员
加入
12月4日,2020年
消息
18
编程经验
1-3
你好!我正在使用我的Visual Studio连接了SQL Management Studio,在那里我正在进行这款医院管理系统。我已经将患者ID设置为 首要的关键 在SQL Management Studio中。但是当我进入重复的ID时,代码没有任何异议。我该怎么办法不允许Winform接受重复的患者ID。以下是患者登记表的代码。

C#:
private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-A85V0ME\SQLEXPRESS;Initial Catalog=Hospitalmanagement;Integrated Security=True");
            con.Open();
            string gen = string.Empty;
            if (radioButton1.Checked)
            {
                gen = "Male";
            }
            else
            {
                gen = "Female";
            }
            try
            {
                string str = "INSERT INTO patient(id,name,gen,age,date,cont,addr,disease,status,r_type,building,r_no,price) VALUES('" + textBox1.Text +"','" + textBox2.Text + "','" + gen + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox10.Text + "','" + textBox9.Text + "','" + textBox11.Text + "','" + textBox12.Text + "'); ";

                SqlCommand cmd = new SqlCommand(str, con);
                cmd.ExecuteNonQuery();
                string str1 = "select max(Id) from patient;";

                SqlCommand cmd1 = new SqlCommand(str1, con);
                SqlDataReader dr = cmd1.ExecuteReader();
                if (dr.Read())
                {
                    MessageBox.Show("Patient Information Saved Successfully..");
                    textBox2.Text = "";
                    textBox3.Text = "";
                    textBox4.Text = "";
                    textBox5.Text = "";
                    textBox6.Text = "";
                    textBox7.Text = "";
                    textBox8.Text = "";
                    textBox9.Text = "";
                    textBox10.Text = "";
                    textBox11.Text = "";
                    textBox12.Text = "";
                                  
                }               
            }
            catch (SqlException excep)
            {
                MessageBox.Show(excep.Message);
            }
            con.Close();
        }

        private void PatientRegistration_Load(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-A85V0ME\SQLEXPRESS;Initial Catalog=Hospitalmanagement;Integrated Security=True");
            con.Open();
            string str1 = "select max(id) from patient;";

            SqlCommand cmd1 = new SqlCommand(str1, con);
            SqlDataReader dr = cmd1.ExecuteReader();
            if (dr.Read())
            {
                string val = dr[0].ToString();
                if (val == "")
                {
                    textBox1.Text = "1";
                }
                else
                {
                    int a;
                    a = Convert.ToInt32(dr[0].ToString());
                    a = a + 1;
                    textBox1.Text = a.ToString();
                }
            }
            con.Close();
        }
 

编纂

成员
加入
12月4日,2020年
消息
18
编程经验
1-3
所以我有解决方案!在SQL Management Studio中,一旦您进行了表格,您忘记设置主键,然后您无法将其修改以设置主键。您必须在创建表时设置主键。所以它没有保存我的新主键。干杯!
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
为SQL注入攻击很广泛开放。不使用参数的不良开始。始终使用参数。

您的连接应设置为const和/或存储在getter属性中。没有理由将与您联系到您希望使用它的每个方法。考虑为SQL对象创建SQL类。看到了大量的改进空间。

在连接,命令和读取器等上使用语句。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
还有:为什么你让用户选择要分配给患者的患者ID?您应该让数据库自动生成ID。

在关系数据库的早期,建议始终是数据库,而不是用户的ID。如果必须出发ID,请从数据库使用的实际ID中发出不同的ID。不幸的是,这些关系数据库大师的建议已经忽略了乔治华盛顿关于政党的建议也被忽略了。
 
最佳 底部