ببینید کاری نداره مثلا برای جدولی با 5 فیلد: ID, FName, LName, Age, PhoneNo باید 3 کوئری Insert, Delete و Update رو تعریف کنیم:
کل کلاس فرم من اینطوریه که هر کوئری در یکی از متدهای Generate_Delete_Command و Generate_Insert_Command Generate_Update_Command تعریف شده:
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
namespace DBUpdate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dataTable1 = new DataTable();
OleDbConnection oleDbConnection1;
OleDbDataAdapter oleDbDataAdapter1 = new OleDbDataAdapter();
private void Form1_Load(object sender, EventArgs e)
{
this.oleDbConnection1 = new DBConnection().GetOffConnection(Application.Startu pPath + "/db.mdb");
string SelectCommand = "Select * From Table1";
this.oleDbDataAdapter1.SelectCommand = new OleDbCommand(SelectCommand, this.oleDbConnection1);
ReloadDB();
//
//Initialize UPDATE Command.
Generate_Update_Command();
//Initialize INSERT Command.
Generate_Insert_Command();
//Initialize DELETE Command.
Generate_Delete_Command();
}
void ReloadDB()
{
this.dataTable1.Clear();
this.oleDbDataAdapter1.Fill(this.dataTable1);
this.dataGridView1.DataSource = dataTable1;
}
void Generate_Delete_Command()
{
string Command = "Delete From Table1 WHERE ID=@ID";
this.oleDbDataAdapter1.DeleteCommand = new OleDbCommand(Command, this.oleDbConnection1);
this.oleDbDataAdapter1.DeleteCommand.Parameters.Ad dWithValue("@ID", dataTable1.Columns["ID"].DataType).SourceColumn = "ID";
}
void Generate_Update_Command()
{
string Command = "Update Table1 Set [FName]=@FName, [LName]=@LName, [Age]=@Age, [PhoneNo]=@PhoneNo Where [ID]=@ID";
this.oleDbDataAdapter1.UpdateCommand = new OleDbCommand(Command, this.oleDbConnection1);
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@FName", dataTable1.Columns["FName"].DataType).SourceColumn = "FName";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@LName", dataTable1.Columns["LName"].DataType).SourceColumn = "LName";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@Age", dataTable1.Columns["Age"].DataType).SourceColumn = "Age";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@PhoneNo", dataTable1.Columns["PhoneNo"].DataType).SourceColumn = "PhoneNo";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@ID", dataTable1.Columns["ID"].DataType).SourceColumn = "ID";
}
void Generate_Insert_Command()
{
string Command = "INSERT INTO Table1 (FName,LName,Age,PhoneNo) Values(@FName,@LName,@Age,@PhoneNo)";
this.oleDbDataAdapter1.InsertCommand = new OleDbCommand(Command, this.oleDbConnection1);
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@FName", dataTable1.Columns["FName"].DataType).SourceColumn = "FName";
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@LName", dataTable1.Columns["LName"].DataType).SourceColumn = "LName";
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@Age", dataTable1.Columns["Age"].DataType).SourceColumn = "Age";
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@PhoneNo", dataTable1.Columns["PhoneNo"].DataType).SourceColumn = "PhoneNo";
}
private void button1_Click(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
this.dataGridView1.CommitEdit(DataGridViewDataErro rContexts.Commit);
if (dataGridView1.IsCurrentCellInEditMode)
this.dataGridView1.EndEdit();
Cursor.Current = Cursors.WaitCursor;
int r = this.oleDbDataAdapter1.Update(dataTable1);
ReloadDB();
Cursor.Current = Cursors.Default;
}
}
}
البته باز هم بدلیل سادگی این برنامه با دیتابیس اکسس نوشته شده که گفتم هیچ فرقی در روش نمیکنه.
سورس پروژه هم برای درک بهتر: