---> 操作简单,同时可以对数据库进行操作 <---
原文链接:http://www.cnblogs.com/alex-bn-lee/archive/2012/03/11/2390171.html
---------------------------------------------------------------------------------------------------------
●·● 目录:
A1 …………
A2 ………… A3 ………… A5 ………… A6 ………… A7 ………… A8 …………--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝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(); //表名+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!
※ 只是将表结构拖过去了!--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝更新表格:表格修改后!
1. 在数据集上面右键,选择 配置。
2. 选择 查询生成器,选中增加的列。
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝自定义方法,自定义查询生成方法!
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)); } |
效果如下:第一个窗体!
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝优化:
在批量操作的时候,可以先将连接打开,操作之后在将连接关闭,因为强类型转换的时候每次都会开关连接,判断的条件是:之前连接有没有打开,若是打开,则不执行开、关了,若是关闭,则执行开、关操作!
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()); } |
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝●·● :
1. 以 Test 为表名生成的 TestTableAdapter 类。该类所具有的方法是根据原 Test 表为基础的,例如增删改查的方法!如右图,只有 ID、NAME、SIZE三列,其中 ID 是自动增加的,无法修改!
2. TestTableAdapter 方法:
- GetData:将数据中的数据传递给 DataTable 类。
- Update (DataTable table):更新数据到数据库中。
- Insert (string NAME, string SIZE):插入新数据。 123456789101112131415161718192021222324
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(
"导入成功!"
);
}
123456789101112131415private
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(
"不存在这样的身份证号!"
);
}
}
- Delete (int Original_ID, string NAME, string SIZE):删除数据,由于限定很多,可以自己写入方法,简化Delete的操作。首先,在 DataSet1 右键》增加》新查询中增加方法,SQL语句如下: 12
SELECT
ID,
NAME
,
SIZE
FROM
dbo.Test
where
ID = @ID
1234TestTableAdapter 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);
//通过调用属性删除此行
- Update (string NAME, string SIZE, int Original_ID, string Original_NAME, string Original_SIZE):更新数据中的某一行,如上面的方法,更新 ID=4 的一行。 1234
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);
- 自定义的查询方法,都可以通过TestTableAdapter 类的实例来调用。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝●·● :
1. 通过 GetData 方法获取数据库查询后的结果,并存在 Table 里面。Table 是所有 Row 的集合。
2. TestDataTable 属性:
- Count:Table 的总 Row 数。
- IDColumn:返回字段 ID 的列,返回值为DataColumn。NAMEColumn:NAME 列。SIZEColumn:SIZE 列。
- Columns:返回 类。可以获取定义的列的具体信息!
- 类:表示 DataTable 的 DataColumn 对象的集合。 Count:获取集合中的元素的总数。 Item[Int32]:从集合中获取位于指定索引位置的 DataColumn。 Item[String]:从集合中获取具有指定名称的 DataColumn。 Add():创建 DataColumn 对象并将其添加到 DataColumnCollection 中。 Add(DataColumn):创建指定的 DataColumn 对象并将其添加到 DataColumnCollection。 IndexOf(DataColumn):获取按名称指定的列的索引。 IndexOf(String):获取具有特定名称的列的索引(名称不区分大小写)。
- 类:表示 DataTable 中的列的架构。 ColumnName:获取或设置 DataColumnCollection 中的列的名称。 DataType:获取或设置存储在列中的数据的类型。 MaxLength:获取或设置文本列的最大长度。
- 12345678910
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);
}
- Rows:返回 类。获取每行的具体信息!
- 类:表示 DataTable 的行的集合。 Count:获取该集合中 DataRow 对象的总数。 Item:获取指定索引处的行。 Add(DataRow):将指定的 DataRow 添加到 DataRowCollection 对象中。 IndexOf:获取指定 DataRow 对象的索引。
- 类:表示 DataTable 中的一行数据。 Item[Int32]:获取或设置存储在由索引指定的列中的数据。 Item[String]:获取或设置存储在由名称指定的列中的数据。
- 12345678910
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);
}
- 12345678
//遍历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());
//显示出来
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ ╠══════════════════════════════════════════════════╣ ╚════════╝●·● :
1. TestDataRow 类是 TestDataTable 类集合中的一条,返回每一行的内容。
2. TestDataRow 属性:
- ID:获取该行的 ID 值。
- NAME:获取该行的 NAME 值。
- SIZE:获取该行的 SIZE 值。
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); } |