已回答 在Windows窗体中设置主键

编纂

会员
已加入
2020年12月4日
留言内容
18
编程经验
1-3
你好!我已将SQL Management Studio与创建该医院管理系统的Visual 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();
        }
 

编纂

会员
已加入
2020年12月4日
留言内容
18
编程经验
1-3
所以我有解决方案的家伙!在SQL Management Studio中,一旦创建了表,就忘记了设置主键,那么以后就无法对其进行修改以设置主键。创建表时,必须设置主键。因此,它没有保存我的新主键。干杯!
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
您对SQL注入攻击大开眼界。不使用参数会导致错误的开始。始终使用参数。

您的连接应设置为const和/或存储在getter属性中。没有理由将与您的连接带入您希望使用的每种方法中。考虑为您的Sql对象创建一个Sql类。在这里看到了很多改进的空间。

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

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
还有:为什么要让用户选择要分配给患者的患者ID?您应该让数据库自动生成ID。

在关系数据库的早期,建议始终是ID是数据库的,而不是用户的。如果必须给出ID,请给出与数据库使用的实际ID不同的ID。不幸的是,这些关系数据库专家的建议被忽略了,就像乔治·华盛顿有关政党的建议一样。
 
最佳 底部