数据访问有两种不同的方式,一种是用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 = newInfoTableAdapter();
adp.UpdateBycode(name, sex, nation, birthday, code);
例子:在DataGridView里面将内存数据集(dataset)显示,对其进行添加、删除、修改操作,之后将所有修改一并提交至数据库
在这里对数据集的操作都将会做出标记,在提交至数据库的时候系统会自动根据标记找到要修改、删除的行,对其进行操作。
代码:
private DataSet _DS = newDataSet();private void Form2_Load(objectsender, EventArgs e)
{//建立连接
SqlConnection conn = new SqlConnection("server=.;database=mydb;uid=sa;pwd=901004");//造适配器
SqlDataAdapter adapter = newSqlDataAdapter();
adapter.SelectCommand= newSqlCommand();
adapter.SelectCommand.CommandText= "select * from info";
adapter.SelectCommand.Connection=conn;//执行查询,将数据添加进内存数据集
adapter.Fill(_DS);//将内存数据集用控件显示
dataGridView1.DataSource = _DS.Tables[0];
}private void button1_Click(objectsender, 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(objectsender, EventArgs e)
{
SqlConnection conn= new SqlConnection("server=.;database=mydb;uid=sa;pwd=901004");
SqlDataAdapter adapter= newSqlDataAdapter();//添加的
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(objectsender, 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();
}
}