![](/img/trans.png)
[英]How to save DataGridView multiple row data in to MySQL database in c#
[英]How to save data to database using datagridview in C#
我試圖通過使用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();
}
它應該是
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!");
}
}
}
LoadData()函數中的查詢必須在'*'之后有一個空格''。 還建議在更新操作中使用try catch塊。 同樣,最好不要選擇select *,而是選擇所需的列,例如
從myTable中選擇column1,column2;
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
}
通過使用命令生成器,有一種更簡單的方法來執行此操作。
當您將DataGridView綁定到DataTable時,DGV中的任何更改都會反映到DataTable中。 因此,您可以使用命令構建器來保存更改。
如果您看下面的示例,則通過為命令構建器提供SELECT命令,它可以生成需要執行的其他相關命令INSERT,UPDATE和DELETE。
您只需要確保DataTable是Public或可訪問的。
在您的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");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.