---> 操作简单,同时可以对数据库进行操作 <---
原文链接:http://www.cnblogs.com/alex-bn-lee/archive/2012/03/11/2390171.html
---------------------------------------------------------------------------------------------------------
A1 ………… 新建强类型 DataSet
A2 ………… 更新 DataSet 数据
A3 ………… 自定义方法 
A5 ………… 优化
A6 ………… TestTableAdapter 类
A7 ………… TestDataTable 类
A8 ………… TestRow 类
--------------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A1个    ╠══════════════════════════════════════════════════╣
            ╚════════╝
1. 首先,项目右键 添加》新建项,如下图,选择数据》数据集。

2. 将表直接拖拽到数据集中,即可生成强类型DataSet。

3. 下面就可以直接用了!
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
Table1TableAdapter adapter = new Table1TableAdapter();         //新生成的类DataSet1.Table1DataTable data = adapter.GetData();            //新生成的类for (int i = 0; i < data.Count;i++ ){    DataSet1.Table1Row userRow = data[i];            //新生成的类    MessageBox.Show(userRow.UserName);} | 
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
Table1TableAdapter adapter = new Table1TableAdapter();          //表名+TableAdapterDataSet1.Table1DataTable persons = adapter.GetData();         //数据集名.表名+DataTablefor (int i = 0; i < persons.Count;i++ ){    DataSet1.Table1Row person = persons[i];                //数据集名.表名+Row    MessageBox.Show(string.Format("用户名:{0},密码:{1}", person.UserName, person.PassWord));} | 
※ 在使用请类型 DataSet 的时候,表要设置 Primary Key!
※ 只是将表结构拖过去了!
--------------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A2个    ╠══════════════════════════════════════════════════╣
            ╚════════╝
更新表格:表格修改后!
1. 在数据集上面右键,选择 配置。

2. 选择 查询生成器,选中增加的列。

--------------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A3个    ╠══════════════════════════════════════════════════╣
            ╚════════╝
自定义方法,自定义查询生成方法!
1. 在数据集上面右键,选择 添加》查询。

2. 然后可以不停地下一步,选择想要的查询类型:select、update、delete、insert。
3. 最后就是写入语句,语句可以没有参数,也可以加入参数,如下:选择 Id 大于某值的结果。

4. 向下面这样使用!
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
Table1TableAdapter adapter = new Table1TableAdapter();DataSet1.Table1DataTable persons = adapter.GetDataById(5);      //自定义方法,选择 Id > 5 的部分for (int i = 0; i < persons.Count;i++ ){    MessageBox.Show(string.Format("Id = {0}\r\nUserName = {1}\r\nPassWord = {2}",        persons[i].Id.ToString(), persons[i].UserName, persons[i].PassWord));} | 
效果如下:第一个窗体!

--------------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A4个    ╠══════════════════════════════════════════════════╣
            ╚════════╝
优化:
在批量操作的时候,可以先将连接打开,操作之后在将连接关闭,因为强类型转换的时候每次都会开关连接,判断的条件是:之前连接有没有打开,若是打开,则不执行开、关了,若是关闭,则执行开、关操作!
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
 | 
private void button8_Click(object sender, EventArgs e){    Stopwatch sw = new Stopwatch();    sw.Start();    Table1TableAdapter adapter = new Table1TableAdapter();    for (int i = 0; i < 1000;i++ )    {        adapter.Insert(i.ToString(), i.ToString(), 0, "dsklf");    }    sw.Stop();    MessageBox.Show(sw.Elapsed.ToString());} | 

| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
 | 
private void button8_Click(object sender, EventArgs e){    Stopwatch sw = new Stopwatch();    sw.Start();    adapter.Connection.Open();    Table1TableAdapter adapter = new Table1TableAdapter();    for (int i = 0; i < 1000;i++ )    {        adapter.Insert(i.ToString(), i.ToString(), 0, "dsklf");    }    adapter.Connection.Close();    sw.Stop();    MessageBox.Show(sw.Elapsed.ToString());} | 

---------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A5个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

1. 以 Test 为表名生成的 TestTableAdapter 类。该类所具有的方法是根据原 Test 表为基础的,例如增删改查的方法!如右图,只有 ID、NAME、SIZE三列,其中 ID 是自动增加的,无法修改!
2. TestTableAdapter 方法:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
 | 
private void button1_Click(object sender, EventArgs e){    OpenFileDialog ofd = new OpenFileDialog();    if (ofd.ShowDialog() != DialogResult.OK)              //寻找文件    {        return;    }    IdentifyCardTableAdapter adapter = new IdentifyCardTableAdapter();    using (FileStream file = File.OpenRead(ofd.FileName))    {        using (StreamReader reader = new StreamReader(file,System.Text.Encoding.Default))        {                                                                       //不写编码,没办法读汉字            string str;            while ((str = reader.ReadLine()) != null)            //每次执行 ReadLine 都会下移一行            {                string[] strs = str.Split(‘\t‘);                     //对于 Tab键 的 split 方法,不能通过 substring 来计算                string num = strs[1];                //第一排的数据不用,直接用第二排的数据                string name = strs[2];                adapter.Insert(num,name);            }        }    }    MessageBox.Show("导入成功!");} | 

| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
 | 
private void button1_Click(object sender, EventArgs e){    string num = textBox1.Text.Substring(0, 6);    IdentifyCardTableAdapter adapter = new IdentifyCardTableAdapter();    DataSet1.IdentifyCardDataTable table = adapter.GetDataByNum(num);    if (table.Count > 0)    {        DataSet1.IdentifyCardRow row = table[0];        MessageBox.Show(string.Format("身份证号{0}的归属地为{1}!",textBox1.Text,row.Name));    }    else    {        MessageBox.Show("不存在这样的身份证号!");    }} | 

| 
 1 
2 
 | 
SELECT ID, NAME, SIZE FROM dbo.Testwhere ID = @ID | 
| 
 1 
2 
3 
4 
 | 
TestTableAdapter adapter = new TestTableAdapter();DataSet1.TestDataTable table = adapter.GetDataByID(5);           //返回 ID=5 的一行DataSet1.TestRow row = table[0];           //将返回的数据赋值给rowadapter.Delete(row.ID, row.NAME, row.SIZE);             //通过调用属性删除此行 | 
| 
 1 
2 
3 
4 
 | 
TestTableAdapter adapter = new TestTableAdapter();DataSet1.TestDataTable table = adapter.GetDataByID(4);DataSet1.TestRow row = table[0];adapter.Update("Alex","555",row.ID, row.NAME, row.SIZE); | 
---------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A6个    ╠══════════════════════════════════════════════════╣
            ╚════════╝
1. 通过 GetData 方法获取数据库查询后的结果,并存在 Table 里面。Table 是所有 Row 的集合。
2. TestDataTable 属性:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
Table1TableAdapter adapter = new Table1TableAdapter();DataSet1.Table1DataTable data = adapter.GetData();DataColumnCollection dcc = data.Columns;for (int i = 0; i < dcc.Count; i++){    DataColumn dc = dcc[i];    string str = String.Format("Name: {0}\r\nLength: {1}\r\nDataType: {2}",        dc.ColumnName, dc.MaxLength.ToString(), dc.DataType.ToString());    MessageBox.Show(str);} | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
Table1TableAdapter adapter = new Table1TableAdapter();DataSet1.Table1DataTable data = adapter.GetData();DataRowCollection drc = data.Rows;for (int i = 0; i < drc.Count; i++){    DataRow dr = drc[i];    string str = String.Format("ID: {0}\r\nUserName: {1}\r\nPassWord: {2}",        dr[0].ToString(), dr[1].ToString(), dr[2].ToString());    MessageBox.Show(str);} | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
//遍历Table中每一行中的NAME值。TestTableAdapter adapter = new TestTableAdapter();DataSet1.TestDataTable table = adapter.GetData();          //获取数据foreach (DataSet1.TestRow row in table)           //遍历,每一个table值都是一个row{    MessageBox.Show(row.NAME);              //获取NAME属性}MessageBox.Show(table.Count.ToString());              //显示出来 | 
---------------------------------------------------------------------------------------------------------
            ╔════════╗
╠════╣    第A7个    ╠══════════════════════════════════════════════════╣
            ╚════════╝
1. TestDataRow 类是 TestDataTable 类集合中的一条,返回每一行的内容。
2. TestDataRow 属性:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
Table1TableAdapter adapter = new Table1TableAdapter();DataSet1.Table1DataTable data = adapter.GetData();foreach(DataSet1.Table1Row row in data){    string str = String.Format("ID: {0}\r\nUserName: {1}\r\nPassWord: {2}",        row.ID.ToString(), row.UserName.ToString(), row.PassWord.ToString());    MessageBox.Show(str);} | 
原文:http://www.cnblogs.com/khfang/p/5778765.html