数据访问有两种不同的方式,一种是用Connection, Command , DataReader来进行数据对数据的操作,另一种是用DataAdapter(适配器)来进行数据操作,而数据则一般放在内存中的数据集合DataSet,这种方式可以在内存中对数据操作,然后在合适的时间再将修改传到数据库。
一. 建立数据集:
1. 在解决方案右键添加新建项,找到数据中的数据集:
2. 在服务器资源管理器里数据连接添加连接:
3. 之后找到数据库里面需要用到的表,选中之后拖拽至右侧数据集里:
这样一个数据集就建好了。
二:在数据集里添加新查询
1. 选中一个表的TableAdapter,右键配置高级选项,勾掉后两项,去掉并发
2. 右键添加查询,选SQL语句下一步,选择查询的类型(是要返回行或单个值或修改,删除,添加)下一步,写SQL语句,之后完成。
3. 这样在数据集可以看到我们自己添加的查询了:
三: 如何使用
1. 造适配器对象:
InfoTableAdapter adp = new InfoTableAdapter();
2. 造内存表对象
Mydb.InfoDataTable table = new Mydb.InfoDataTable();
3. 查询返回
table = adp.GetData();
4. 修改
InfoTableAdapter adp = new InfoTableAdapter(); adp.UpdateBycode(name, sex, nation, birthday, code);
例子:在DataGridView里面将内存数据集(dataset)显示,对其进行添加、删除、修改操作,之后将所有修改一并提交至数据库
在这里对数据集的操作都将会做出标记,在提交至数据库的时候系统会自动根据标记找到要修改、删除的行,对其进行操作。
代码:
private DataSet _DS = new DataSet();
private void Form2_Load(object sender, EventArgs e) { //建立连接 SqlConnection conn = new SqlConnection("server=.;database=mydb;uid=sa;pwd=901004"); //造适配器 SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(); adapter.SelectCommand.CommandText = "select * from info"; adapter.SelectCommand.Connection = conn; //执行查询,将数据添加进内存数据集 adapter.Fill(_DS); //将内存数据集用控件显示 dataGridView1.DataSource = _DS.Tables[0]; } private void button1_Click(object sender, EventArgs e) { //添加 DataRow row = _DS.Tables[0].NewRow(); row["Code"] = txtCode.Text; row["Name"] = txtName.Text; row["Sex"] = Convert.ToBoolean(txtSex.Text);; row["Nation"] = txtNation.Text; row["Birthday"] = Convert.ToDateTime(txtBirthday.Text); _DS.Tables[0].Rows.Add(row); } private void button2_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("server=.;database=mydb;uid=sa;pwd=901004"); SqlDataAdapter adapter = new SqlDataAdapter(); //添加的 SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "insert into info values(@code,@name,@sex,@nation,@birthday)"; cmd.Parameters.Add("@code", SqlDbType.VarChar, 50, "Code"); cmd.Parameters.Add("@name", SqlDbType.VarChar, 50, "name"); cmd.Parameters.Add("@sex", SqlDbType.Bit, 1, "Sex"); cmd.Parameters.Add("@nation", SqlDbType.VarChar, 50, "Nation"); cmd.Parameters.Add("@Birthday", SqlDbType.DateTime,8, "Birthday"); adapter.InsertCommand = cmd; //修改的 SqlCommand cmd1 = conn.CreateCommand(); cmd1.CommandText = "update info set name=@name,sex=@sex,nation=@nation,birthday=@birthday where code=@code"; cmd1.Parameters.Add("@code", SqlDbType.VarChar, 50, "Code"); cmd1.Parameters.Add("@name", SqlDbType.VarChar, 50, "name"); cmd1.Parameters.Add("@sex", SqlDbType.Bit, 1, "Sex"); cmd1.Parameters.Add("@nation", SqlDbType.VarChar, 50, "Nation"); cmd1.Parameters.Add("@Birthday", SqlDbType.DateTime, 8, "Birthday"); adapter.UpdateCommand = cmd1; //删除的 SqlCommand cmd2 = conn.CreateCommand(); cmd2.CommandText = "delete from info where code=@code"; cmd2.Parameters.Add("@code", SqlDbType.VarChar, 50, "Code"); adapter.DeleteCommand = cmd2; //提交 adapter.Update(_DS); MessageBox.Show("OK"); } private void button3_Click(object sender, EventArgs e) { //删除 DataRow row = null; //找行 foreach (DataRow dr in _DS.Tables[0].Rows) { if (dr["Code"].ToString() == txtCode.Text) { row = dr; } } if (row != null) { //把行删掉 row.Delete(); } }