---------------------------------------------------------------------------------------------------------
A1 ………… 新建强类型 DataSet
A2 ………… 更新 DataSet 数据
A3 ………… 自定义方法
A5 ………… 优化
A6 ………… TestTableAdapter 类
A7 ………… TestDataTable 类
A8 ………… TestRow 类
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A1个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 首先,项目右键 添加》新建项,如下图,选择数据》数据集。
2. 将表直接拖拽到数据集中,即可生成强类型DataSet。
3. 下面就可以直接用了!
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);
}
Table1TableAdapter adapter = new Table1TableAdapter(); //表名+TableAdapter
DataSet1.Table1DataTable persons = adapter.GetData(); //数据集名.表名+DataTable
for (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. 向下面这样使用!
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个 ╠══════════════════════════════════════════════════╣
╚════════╝
优化:
在批量操作的时候,可以先将连接打开,操作之后在将连接关闭,因为强类型转换的时候每次都会开关连接,判断的条件是:之前连接有没有打开,若是打开,则不执行开、关了,若是关闭,则执行开、关操作!
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());
}
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 类。
2. TestTableAdapter 方法:
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("导入成功!");
}
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("不存在这样的身份证号!");
}
}
SELECT ID, NAME, SIZE FROM dbo.Test
where ID = @ID
TestTableAdapter adapter = new TestTableAdapter();
DataSet1.TestDataTable table = adapter.GetDataByID(5); //返回 ID=5 的一行
DataSet1.TestRow row = table[0]; //将返回的数据赋值给row
adapter.Delete(row.ID, row.NAME, row.SIZE); //通过调用属性删除此行
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 属性:
//遍历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 属性: