将数据从datagrid一次保存到SQL

时间:2016-12-07 08:27:36

标签: c# sql

我在C#中有一个winform应用程序允许从我的SQL数据库编辑表。 我设法打开表并编辑它们,但是当我保存数据时,所有行都被复制。 有没有办法做到这一点,但只编辑必填字段或插入添加新的字段?我尝试了更新命令,但它不起作用。

我使用的代码是:

using (SqlConnection con = new SqlConnection(cs))
{
    con.Open();
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (!row.IsNewRow)
        {
            using (SqlCommand cmd = new SqlCommand("INSERT INTO temp (data1, data2, data3, data4) VALUES(@c1,@c2,@c3,@c4)", con))
            {
                cmd.Parameters.AddWithValue("@C1", row.Cells[0].Value);
                cmd.Parameters.AddWithValue("@C2", row.Cells[1].Value);
                cmd.Parameters.AddWithValue("@C3", row.Cells[2].Value);
                cmd.Parameters.AddWithValue("@C4", row.Cells[3].Value);
                cmd.ExecuteNonQuery();
            }
        }
    }
}

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

假设您的DataGridView未绑定到数据库(或者它已经包含您不想再次插入的数据库中的行),那么最好使用循环。

using (SqlConnection con = new SqlConnection(connectionString))
    {
    using (SqlCommand cmd = new SqlCommand("INSERT INTO MyTable(Column1, Column2) VALUES (@C1, @C2)", con))
        {
        cmd.Parameters.Add(new SqlParameter("@C1", SqlDbType.VarChar));
        cmd.Parameters.Add(new SqlParameter("@C2", SqlDbType.VarChar));
        con.Open();
        foreach (DataGridViewRow row in myDataGridView.Rows)
            {
            if (!row.IsNewRow)
                {
                cmd.Parameters["@C1"].Value = row.Cells[0].Value;
                cmd.Parameters["@C2"].Value = row.Cells[1].Value;
                cmd.ExecuteNonQuery();
                }
            }
        }
    }

答案 1 :(得分:0)

旧式: 使用DataSet作为DataGrid和save using a DataAdapter的数据源。

2017年的方式: 转到Entity Framework way并使用类型化对象的本机集合作为DataGrid的数据源。