C#对Access进行增删改查的完整示例
这篇文章整理了C#对Access数据库的查询、添加记录、删除记录和更新数据等一系列的操作示例,有需要的可以参考学习。
首先是AccessHelper.cs,网上有下载,下面附送一份;
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Data.OleDb; usingSystem.Data; usingSystem.Windows.Forms; namespaceyxdain { publicclassAccessHelper { privatestringconn_str=null; privateOleDbConnectionole_connection=null; privateOleDbCommandole_command=null; privateOleDbDataReaderole_reader=null; privateDataTabledt=null; ///<summary> ///构造函数 ///</summary> publicAccessHelper() { //conn_str=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource='"+Environment.CurrentDirectory+"\\yxdain.accdb'"; conn_str=@"Provider=Microsoft.ACE.OLEDB.12.0;DataSource='"+Environment.CurrentDirectory+"\\yxdain.accdb'"; InitDB(); } privatevoidInitDB() { ole_connection=newOleDbConnection(conn_str);//创建实例 ole_command=newOleDbCommand(); } ///<summary> ///构造函数 ///</summary> ///<paramname="db_path">数据库路径 publicAccessHelper(stringdb_path) { //conn_str="Provider=Microsoft.Jet.OLEDB.4.0;DataSource='"+db_path+"'"; conn_str="Provider=Microsoft.ACE.OLEDB.12.0;DataSource='"+db_path+"'"; InitDB(); } ///<summary> ///转换数据格式 ///</summary> ///<paramname="reader">数据源 ///<returns>数据列表</returns> privateDataTableConvertOleDbReaderToDataTable(refOleDbDataReaderreader) { DataTabledt_tmp=null; DataRowdr=null; intdata_column_count=0; inti=0; data_column_count=reader.FieldCount; dt_tmp=BuildAndInitDataTable(data_column_count); if(dt_tmp==null) { returnnull; } while(reader.Read()) { dr=dt_tmp.NewRow(); for(i=0;i<data_column_count;++i) { dr[i]=reader[i]; } dt_tmp.Rows.Add(dr); } returndt_tmp; } ///<summary> ///创建并初始化数据列表 ///</summary> ///<paramname="Field_Count">列的个数 ///<returns>数据列表</returns> privateDataTableBuildAndInitDataTable(intField_Count) { DataTabledt_tmp=null; DataColumndc=null; inti=0; if(Field_Count<=0) { returnnull; } dt_tmp=newDataTable(); for(i=0;i<Field_Count;++i) { dc=newDataColumn(i.ToString()); dt_tmp.Columns.Add(dc); } returndt_tmp; } ///<summary> ///从数据库里面获取数据 ///</summary> ///<paramname="strSql">查询语句 ///<returns>数据列表</returns> publicDataTableGetDataTableFromDB(stringstrSql) { if(conn_str==null) { returnnull; } try { ole_connection.Open();//打开连接 if(ole_connection.State==ConnectionState.Closed) { returnnull; } ole_command.CommandText=strSql; ole_command.Connection=ole_connection; ole_reader=ole_command.ExecuteReader(CommandBehavior.Default); dt=ConvertOleDbReaderToDataTable(refole_reader); ole_reader.Close(); ole_reader.Dispose(); } catch(System.Exceptione) { //Console.WriteLine(e.ToString()); MessageBox.Show(e.Message); } finally { if(ole_connection.State!=ConnectionState.Closed) { ole_connection.Close(); } } returndt; } ///<summary> ///执行sql语句 ///</summary> ///<paramname="strSql">sql语句 ///<returns>返回结果</returns> publicintExcuteSql(stringstrSql) { intnResult=0; try { ole_connection.Open();//打开数据库连接 if(ole_connection.State==ConnectionState.Closed) { returnnResult; } ole_command.Connection=ole_connection; ole_command.CommandText=strSql; nResult=ole_command.ExecuteNonQuery(); } catch(System.Exceptione) { //Console.WriteLine(e.ToString()); MessageBox.Show(e.Message); returnnResult; } finally { if(ole_connection.State!=ConnectionState.Closed) { ole_connection.Close(); } } returnnResult; } } }
定义变量,设置列标题;
privateAccessHelperachelp; ...... privatevoidForm1_Load(objectsender,EventArgse) { achelp=newAccessHelper(); stringsql1="select*fromycyx"; databind1(sql1); dataGridView1.Columns[0].Visible=false; dataGridView1.Columns[1].HeaderCell.Value="服务号码"; dataGridView1.Columns[2].HeaderCell.Value="客户名称"; dataGridView1.Columns[3].HeaderCell.Value="归属地区"; dataGridView1.Columns[4].HeaderCell.Value="当前品牌"; dataGridView1.Columns[5].HeaderCell.Value="当前套餐"; dataGridView1.Columns[6].HeaderCell.Value="当前状态"; }
显示数据表全部内容;
privatevoiddatabind1(stringsqlstr) { DataTabledt=newDataTable(); dt=achelp.GetDataTableFromDB(sqlstr); dataGridView1.DataSource=dt; }
读取要更新记录到更新窗体控件;
privatevoidbutton3_Click(objectsender,EventArgse) { if(dataGridView1.SelectedRows.Count<1||dataGridView1.SelectedRows[0].Cells[1].Value==null) { MessageBox.Show("没有选中行。","M营销"); return; } //f3.Owner=this; DataTabledt=newDataTable(); objectoid=dataGridView1.SelectedRows[0].Cells[0].Value; stringsql="select*fromycyxwhereID="+oid; dt=achelp.GetDataTableFromDB(sql); f3=newForm3(); f3.id=int.Parse(oid.ToString()); //f3.id=2; f3.Text1=dt.Rows[0][1].ToString(); f3.Text2=dt.Rows[0][2].ToString(); f3.Text3=dt.Rows[0][3].ToString(); f3.Text4=dt.Rows[0][4].ToString(); f3.Text5=dt.Rows[0][5].ToString(); f3.Text6=dt.Rows[0][6].ToString(); f3.ShowDialog(); }
添加记录;
privatevoidbutton4_Click(objectsender,EventArgse) { if(textBox1.Text==""&&textBox2.Text==""&&textBox3.Text==""&&textBox4.Text==""&&textBox5.Text==""&&textBox6.Text=="") { MessageBox.Show("没有要添加的内容","M营销添加"); return; } else { stringsql="insertintoycyx(fwhm,khmc,gsdq,dqpp,dqtc,dqzt)values('"+textBox1.Text+"','"+textBox2.Text+"','"+ textBox3.Text+"','"+textBox4.Text+"','"+textBox5.Text+"','"+textBox6.Text+"')"; intret=achelp.ExcuteSql(sql); stringsql1="select*fromycyx"; databind1(sql1); textBox1.Text=""; textBox2.Text=""; textBox3.Text=""; textBox4.Text=""; textBox5.Text=""; textBox6.Text=""; } }
删除记录;
privatevoidbutton2_Click(objectsender,EventArgse) { if(dataGridView1.SelectedRows.Count<1||dataGridView1.SelectedRows[0].Cells[1].Value==null) { MessageBox.Show("没有选中行。","M营销"); } else { objectoid=dataGridView1.SelectedRows[0].Cells[0].Value; if(DialogResult.No==MessageBox.Show("将删除第"+(dataGridView1.CurrentCell.RowIndex+1).ToString()+"行,确定?","M营销",MessageBoxButtons.YesNo)) { return; } else { stringsql="deletefromycyxwhereID="+oid; intret=achelp.ExcuteSql(sql); } stringsql1="select*fromycyx"; databind1(sql1); } }
查询;
privatevoidbutton13_Click(objectsender,EventArgse) { if(textBox23.Text=="") { MessageBox.Show("请输入要查询的当前品牌","M营销"); return; } else { stringsql="select*fromycyxwheredqpp='"+textBox23.Text+"'"; DataTabledt=newSystem.Data.DataTable(); dt=achelp.GetDataTableFromDB(sql); dataGridView1.DataSource=dt; } }
用户确定显示或不显示哪些数据列;
privatevoidbutton15_Click(objectsender,EventArgse) { if(checkBox1.Checked==true) { dataGridView1.Columns[1].Visible=true; } else { dataGridView1.Columns[1].Visible=false; } if(checkBox2.Checked==true) { dataGridView1.Columns[2].Visible=true; } else { dataGridView1.Columns[2].Visible=false; } if(checkBox3.Checked==true) { dataGridView1.Columns[3].Visible=true; } else { dataGridView1.Columns[3].Visible=false; } if(checkBox4.Checked==true) { dataGridView1.Columns[4].Visible=true; } else { dataGridView1.Columns[4].Visible=false; } if(checkBox5.Checked==true) { dataGridView1.Columns[5].Visible=true; } else { dataGridView1.Columns[5].Visible=false; } if(checkBox6.Checked==true) { dataGridView1.Columns[6].Visible=true; } else { dataGridView1.Columns[6].Visible=false; } }
更新数据;
publicpartialclassForm3:Form { privateAccessHelperachelp; privateintiid; publicForm3() { InitializeComponent(); achelp=newAccessHelper(); iid=0; } //更新 privatevoidbutton1_Click(objectsender,EventArgse) { try { //UPDATEPersonSETAddress='Zhongshan23',City='Nanjing'WHERELastName='Wilson' stringsql="updateycyxsetfwhm='"+textBox1.Text+"',khmc='"+textBox2.Text+"',gsdq='"+textBox3.Text+"',dqpp='"+textBox4.Text+ "',dqtc='"+textBox5.Text+"',dqzt='"+textBox6.Text+"'whereID="+iid; intret=achelp.ExcuteSql(sql); if(ret>-1) { this.Hide(); MessageBox.Show("更新成功","M营销"); } } catch(Exceptionex) { MessageBox.Show(ex.Message); } } privatevoidForm3_Load(objectsender,EventArgse) { } publicintid { get{returnthis.iid;} set{this.iid=value;} } publicstringText1 { get{returnthis.textBox1.Text;} set{this.textBox1.Text=value;} } publicstringText2 { get{returnthis.textBox2.Text;} set{this.textBox2.Text=value;} } publicstringText3 { get{returnthis.textBox3.Text;} set{this.textBox3.Text=value;} } publicstringText4 { get{returnthis.textBox4.Text;} set{this.textBox4.Text=value;} } publicstringText5 { get{returnthis.textBox5.Text;} set{this.textBox5.Text=value;} } publicstringText6 { get{returnthis.textBox6.Text;} set{this.textBox6.Text=value;} } //取消 privatevoidbutton2_Click(objectsender,EventArgse) { this.Hide(); } } }
注意此处有一个技巧;C#Winform,在窗体之间传值,或在一个窗体中设置另一个窗体的控件的值时,有多种方式;最好方式是如上代码所示;使用.net的get、set属性;
控件是一个窗体的私有变量,不能在另一个窗体中直接访问;为了在a窗体中设置b窗体的控件的值,对b窗体的控件都添加一个带get、set的公共属性,就可在a中设置b中控件的值,具体看代码;
以上就是C#对Access进行增删改查的完整示例代码,希望对大家学习C#能有所帮助。