c#连接数据库需要引用一些东西,首先我们引用:using System.Data.OleDb。
其次我们需要拖动一些控件,包括button,combobox,datagridview等。。。这里就不一一说明了。效果图如下
1.能不能自己选择打开某个数据库呢?而不是在代码里面就已经确定我要打开某个数据库了?
首先要写的是下面的这个代码,这个代码是写在form里买的全局变量,因为如果写在某个button的响应事件,就成为了局部变量,以后不能去引用,很麻烦。
string dbname = "";//数据库的名称,带后缀 string db_con = "";//建立connection是需要提供的版本信息,数据库名称 string sql = "";//从数据库中查询表格的SQL语句 OleDbConnection conn = new OleDbConnection();//建立一个数据库连接的类 DataSet dat = new DataSet();//建立一个内存数据库,用来保存你连接的数据库 OleDbDataAdapter ad;//建立一个各种类,用来进行数据库和内存的操作关联必须,笔者也不是很理解这些类的作用 OleDbCommand comd; OleDbDataReader read; OleDbCommandBuilder bu; DataTable students;
这个代码是写在一个button控件里面的click响应函数里面的,实现连接数据库,并且将其表现在datagridview控件中
OpenFileDialog of = new OpenFileDialog(); of.ShowDialog(); dbname = of.SafeFileName;//open file and get the name of file db_con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbname;//fill the datasource with file name conn.ConnectionString = db_con; conn.Open(); sql = "SELECT * FROM student"; ad = new OleDbDataAdapter(sql, conn); bu = new OleDbCommandBuilder(ad); ad.Fill(dat,"neicun_table"); students = dat.Tables[0]; ad.Update(dat, "neicun_table"); dataGridView1.DataSource = students;
2.如何建立一个combobox,使其实现自动获取数据库的各个字段名称并且显示呢?这样就可以根据条件来筛选出自己想要的数据了?
其实很简单只需要下面的几行代码(此代码也是写在button1控件里面的)就可以获取你数据库的所有字段名称,并且显示到combobox中
for (int i = 0; i < this.dataGridView1.Columns.Count; i++) { comboBox1.Items.Add(this.dataGridView1.Columns[i].HeaderText); }
3.还想实现另外一个combobox,当选中combobox1中某个字段时,该combobox自动显示出该字段下面的所有值,用来作为筛选条件。代码写在combobox1中的seleceindexchange事件中,意思是选中的下标状态改变时,执行此事件
这里用到的时datareader类,该类可以读取数据库,调用其中的获取指定列字段名的方法,获得你选择的字段。不过后来笔者发现,有更简单的办法
ad = new OleDbDataAdapter(sql, conn); ad.Fill(dat, "neicun_table"); comd = new OleDbCommand(); comd.CommandText = sql; comd.Connection = conn; read = comd.ExecuteReader(); string col_title = read.GetName(comboBox1.SelectedIndex); comboBox2.DataSource = dat; comboBox2.DisplayMember = "neicun_table." + col_title;
只需要一行代码,就可以实现,如果采用这种办法,则不需要定义全局变量 OleDbCommand comd;OleDbDataReader read;
comboBox2.DataSource = dat;
comboBox2.DisplayMember = "neicun_table." + comboBox1.SelectedItem;
但是这里有个小小的问题,如果该字段是性别,那么就会出现一些不是很好的情况,你会发现有男女重复的展示,笔者这里没有对此优化,如果大家有好的办法,可以交流一下。
4.那么就到了最后一步了,当我确定了筛选条件之后,如何改变datagridview的值呢,实现同步的更新?
原文地址:https://www.cnblogs.com/qin5429/p/10055908.html