C# 在winforms中单键单击插入、更新

C# 在winforms中单键单击插入、更新,c#,C#,我不明白,如何在WinC窗体中插入和更新数据,只需单击一个按钮 private void save_Click(object sender, EventArgs e) { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "data source=Sai;database=kaur; user id=sa;password=azxc;"; cn.Open();

我不明白,如何在WinC窗体中插入和更新数据,只需单击一个按钮

private void save_Click(object sender, EventArgs e)
    {
        SqlConnection cn = new SqlConnection();
        cn.ConnectionString = "data source=Sai;database=kaur; user id=sa;password=azxc;";


        cn.Open();

        string gen;
        if (radioButton1.Checked == true)
            gen = "Male";
        else
            gen = "Female";
        string clas = null;
        clas = comboBox1.Text;

        string section = null;
        section = comboBox2.Text;
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "insert into studetail values('" + textBox1.Text + "','" + textBox2.Text + "','" + gen + "','" + textBox3.Text + "','" + clas + "','" + section + "')";

        cmd.Connection = cn;

        int n = cmd.ExecuteNonQuery();
        if (n > 0)
            MessageBox.Show(n + " Row Inserted.");
        else
            MessageBox.Show("Insertion failed.");

        SqlDataAdapter da = new SqlDataAdapter("select * from studetail ", cn);
        DataTable dt = new DataTable();
        da.Fill(dt);
        dataGridView1.DataSource = dt;

您可以在插入之前添加删除:

        private void save_Click(object sender, EventArgs e)
        {
            DeletePerson(id); // add this
            SqlConnection cn = new SqlConnection();

            ...
        }


        public void DeletePerson(int id)
        {
            using(SqlConnection connection = new SqlConnection(credentials))
            {
                connection.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = connection;   
                cmd.CommandText = "delete from studetail where someUniqeIdColumn = " + id;        
                cmd.ExecuteNonQuery(); 
            }
        }
使用responsible来处理连接。 考虑使用或。 你暴露在危险之中。
首先,SQL查询并不完全正确。它应该如下所示:

INSERT INTO studetail (columnName1, columnName2, ...columnNameN)  
VALUES (value1, value2, ...valueN);
其中,列名是要插入数据的列,值是要插入到所述列中的数据

您还应该通过在using语句中包装连接来处理连接

using(var con = new SqlConnection(connectionString))
{
con.Open();
//rest of code that needs a connection here
}
此外,您需要警惕SQL注入。我强烈推荐MSDN网站上的例子。它将为您提供一个使用SQL更新和使用SqlCommand.Paramaters属性避免SQL注入的示例

如果还没有主键,那么数据库表中也应该有主键,这样就可以唯一地标识表中的每条记录

要在同一按钮上执行更新和保存,需要检查正在编辑的数据是否已经存在行。这是当一个主要的派上用场的时候。您需要检查数据库,以查看记录是否已存在

SELECT 1 FROM studetail WHERE <Condition>

WHERE条件是在表中唯一标识主键和行的方式。如果表中的行是唯一标识的,那么如果存在值,上面的SQL语句将返回1,这意味着您可以更新,如果不存在记录,则返回0,因此您可以插入

您在每一行中都有唯一的id吗?