如何在 C# 中使用 datagridview 将数据保存到数据库

本文关键字:数据 保存 数据库 datagridview | 更新日期: 2023-09-27 17:56:35

我尝试使用datagridview更新我的数据库没有错误,但是当我单击"保存"按钮时没有进行任何更改。你能在这里帮我吗..这是我的代码提前谢谢。.

private void EditRecord_Load(object sender, EventArgs e) {
     LoadData();
}
void LoadData() {
    string query = "SELECT *FROM Record";
    SqlDataAdapter da = new SqlDataAdapter(query, con);
    SqlCommandBuilder sbuilder = new SqlCommandBuilder(da);
    DataTable dtable = new DataTable();
    da.Fill(dtable);
    BindingSource bsource = new BindingSource();
    bsource.DataSource = dtable;
    dgv.DataSource = bsource;
}
private void btnSave_Click(object sender, EventArgs e) {
    if (dgv.RowCount > 1) {
        for (int x = 0; x < dgv.RowCount - 1; x++) {
            if (dgv.Rows[x].Cells[0].Value.ToString() == "") {
                SqlCommand cmdSave = new SqlCommand("UPDATE tblRecord SET FName=@FName, Address=@Address, ContactNo=@ContactNo WHERE IdNo=@IdNo", con);
                {
                    cmdSave.Parameters.Add("@IdNo", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[0].Value;
                    cmdSave.Parameters.Add("@FName", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[1].Value;
                    cmdSave.Parameters.Add("@Address", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[2].Value;
                    cmdSave.Parameters.Add("@ContactNo", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[3].Value;
                }
                con.Open();
                cmdSave.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Record Updated!");
            }
        }
    }
    LoadData();
}

如何在 C# 中使用 datagridview 将数据保存到数据库

LoadData() 函数中的查询必须在"*"后面有一个空格 ''。还建议在更新操作中使用 try catch 块。此外,与其运行 select *,不如始终首选选择所需的列,例如

从我的表中选择列 1,列 2;

string query = "SELECT * FROM Record";
try{
     //open connection
     //Excecute your command
   }
 catch (SqlException ex)
   {
       //Log exception(ex)
       // throw ex
   }
 finally
   {
      // Check if connection not null then  close connection
   }

它应该是

private void btnSave_Click(object sender, EventArgs e) {
if (dgv.RowCount >= 1) {
    for (int x = 0; x < dgv.RowCount - 1; x++) {
        if (dgv.Rows[x].Cells[0].Value.ToString()!="" && dgv.Rows[x].Cells[0].Value!=null) {
            SqlCommand cmdSave = new SqlCommand("UPDATE tblRecord SET FName=@FName,   Address=@Address, ContactNo=@ContactNo WHERE IdNo=@IdNo", con);
            {
                cmdSave.Parameters.Add("@IdNo", SqlDbType.VarChar).Value =   dgv.Rows[x].Cells[0].Value.ToString();
                cmdSave.Parameters.Add("@FName", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[1].Value.ToString();
                cmdSave.Parameters.Add("@Address", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[2].Value.ToString();
                cmdSave.Parameters.Add("@ContactNo", SqlDbType.VarChar).Value = dgv.Rows[x].Cells[3].Value.ToString();
            }
            con.Open();
            cmdSave.ExecuteNonQuery();
            con.Close();
            MessageBox.Show("Record Updated!");
        }
    }
} 

通过使用命令生成器,有一种更简单的方法可以做到这一点。

将 DataGridView 绑定到数据表时,DGV 中的任何更改都会反映到数据表中。因此,您可以使用命令生成器保存更改。

如果你看下面的例子,通过给命令生成器SELECT命令,它可以生成它需要执行的其他相关命令,插入,更新和删除。

您只需要确保数据表是公共的或可访问的。

在btnSave_Click上使用这样的东西:-

using (SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["con"]))
{
    var adaptor = new SqlDataAdapter();
    adaptor.SelectCommand = new SqlCommand("SELECT * FROM [Record]", con);
    var cbr = new SqlCommandBuilder(adaptor);
    cbr.GetDeleteCommand();
    cbr.GetInsertCommand();
    cbr.GetUpdateCommand();
    try
       {
         con.Open();
         adaptor.Update(dtable);
         MessageBox.Show("Changes Saved","Information");
        }
     catch (SqlException ex)
        {
           MessageBox.Show(ex.Message, "SqlException Error");
        }
     catch (Exception x)
        {
           essageBox.Show(x.Message, "Exception Error");
        }
    } 

}