【021】VS2010实现强类型DataSet
---> 操作简单,同时可以对数据库进行操作 <---
---------------------------------------------------------------------------------------------------------
●·● 目录:
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(); //表名+TableAdapterDataSet1.Table1DataTable persons = adapter.GetData(); //数据集名.表名+DataTablefor (int i = 0; i < persons.Count;i++ ){DataSet1.Table1Row person = persons[i]; //数据集名.表名+RowMessageBox.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个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● TestTableAdapter 类:
1. 以 Test 为表名生成的 TestTableAdapter 类。该类所具有的方法是根据原 Test 表为基础的,例如增删改查的方法!如右图,只有 ID、NAME、SIZE三列,其中 ID 是自动增加的,无法修改!
2. TestTableAdapter 方法:
- GetData:将数据中的数据传递给 DataTable 类。
- Update (DataTable table):更新数据到数据库中。
- Insert (string NAME, string SIZE):插入新数据。
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("不存在这样的身份证号!");}}
程序显示:
- Delete (int Original_ID, string NAME, string SIZE):删除数据,由于限定很多,可以自己写入方法,简化Delete的操作。
首先,在 DataSet1 右键》增加》新查询中增加方法,SQL语句如下:SELECT ID, NAME, SIZE FROM dbo.Test where ID = @ID
方法命名为:GetDataByID
可以通过如下的代码简化想要删除编号为 5 的数据。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); //通过调用属性删除此行
- Update (string NAME, string SIZE, int Original_ID, string Original_NAME, string Original_SIZE):更新数据中的某一行,如上面的方法,更新 ID=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);
- 自定义的查询方法,都可以通过TestTableAdapter 类的实例来调用。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● TestDataTable 类:
1. 通过 GetData 方法获取数据库查询后的结果,并存在 Table 里面。Table 是所有 Row 的集合。
2. TestDataTable 属性:
- Count:Table 的总 Row 数。
- IDColumn:返回字段 ID 的列,返回值为DataColumn。
NAMEColumn:NAME 列。
SIZEColumn:SIZE 列。 - Columns:返回 DataColumnCollection 类。可以获取定义的列的具体信息!
- DataColumnCollection 类:表示 DataTable 的 DataColumn 对象的集合。
Count:获取集合中的元素的总数。
Item[Int32]:从集合中获取位于指定索引位置的 DataColumn。
Item[String]:从集合中获取具有指定名称的 DataColumn。
Add():创建 DataColumn 对象并将其添加到 DataColumnCollection 中。
Add(DataColumn):创建指定的 DataColumn 对象并将其添加到 DataColumnCollection。
IndexOf(DataColumn):获取按名称指定的列的索引。
IndexOf(String):获取具有特定名称的列的索引(名称不区分大小写)。 - DataColumn 类:表示 DataTable 中的列的架构。
ColumnName:获取或设置 DataColumnCollection 中的列的名称。
DataType:获取或设置存储在列中的数据的类型。
MaxLength:获取或设置文本列的最大长度。 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);}
- DataColumnCollection 类:表示 DataTable 的 DataColumn 对象的集合。
- Rows:返回 DataRowCollection 类。获取每行的具体信息!
- DataRowCollection 类:表示 DataTable 的行的集合。
Count:获取该集合中 DataRow 对象的总数。
Item:获取指定索引处的行。
Add(DataRow):将指定的 DataRow 添加到 DataRowCollection 对象中。
IndexOf:获取指定 DataRow 对象的索引。 - DataRow 类:表示 DataTable 中的一行数据。
Item[Int32]:获取或设置存储在由索引指定的列中的数据。
Item[String]:获取或设置存储在由名称指定的列中的数据。 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);}
- DataRowCollection 类:表示 DataTable 的行的集合。
//遍历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个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● TestRow 类:
1. TestDataRow 类是 TestDataTable 类集合中的一条,返回每一行的内容。
2. TestDataRow 属性:
- ID:获取该行的 ID 值。
- NAME:获取该行的 NAME 值。
- SIZE:获取该行的 SIZE 值。
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);}
转载于:https://www.cnblogs.com/alex-bn-lee/archive/2012/03/11/2390171.html
【021】VS2010实现强类型DataSet相关推荐
- 强类型DataSet中的DBNull的处理
最近写个小软件懒的用那些ORM,便使用了强类型DataSet,发现这玩意还是挺方便的.不过今天发现如果数据库中对应字段为null的时候,总得到StrongTypingException,说表" ...
- 数据库-ADONET-使用强类型DataSet
使用强类型DataSet对象 使用ADONET访问DataSet内容的方式,与使用ADO和DAO的Recordset对象具有类似的编程格式. l ADONET和VBNET txtCompanyName ...
- WCF传递强类型DataSet【源码】
WCF返回强类型DataSet.rar http://u.115.com/file/f3adbd3c81 转载于:https://www.cnblogs.com/master-zhu/archive/ ...
- 如何实际使用强类型Dataset(键盘再也不需要敲入表名和字段名了)
上一篇文章深度对比 非强类型(UnTyped)Dataset和强类型(Strong-Typed)Dataset>可以由下面这段MSDN中的一段文本加以进一步补充说明: 类型化的 DataSet ...
- 强类型DataSet 数据集的应用
T_person2TableAdapter adapter = new T_person2TableAdapter(); DataSet数据集.DataSetT_Person2.T_person2Da ...
- 将批注用于类型化 DataSet (摘自MSDN)
批注使您能够在不修改基础架构的情况下修改类型化 DataSet 中元素的名称.如果修改基础架构中元素的名称,则会使类型化 DataSet 引用不存在于数据源中的对象,并且会丢失对存在于数据源中的对象的 ...
- 使用DataReader、DataSet、DataAdapter和DataView
使用DataReader.DataSet.DataAdapter和DataView ADO.NET提供两个对象用于检索关系型数据并把它存储在内存中,分别是DataSet和DataReader.Data ...
- 认识并测量Typed DataSet
认识并测量Typed DataSet Truly 2005-08-05 下载本文的源码(C#) - 17k 下载本文的源码(VB) - 15k 简介 强类型DataSet 强类型DataSet是从Da ...
- DataSet DataTable DataReader DataAdapter之间的区别
1.四者各自的介绍 DataSet是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,相当于存在内存中的数据库,应用程序开始运行时,把数据库相关数据保存到DataSet. DataTab ...
- 从数据到代码——通过代码生成机制实现强类型编程[上篇]
我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过Visual Studio,你就应该体验过它带给我们在编程上的便利.随便列举三种典型的代码生成的场景:在创建强类型D ...
最新文章
- 聊聊redisson的DelayedQueue
- 【微信小程序企业级开发教程】事件相关详解
- 直连串口线、交叉串口线
- 2020年阿里云年中大促【福利】【选品】全攻略
- linux驱动头文件查找目录,在Fedora 20中查找简单设备驱动程序的头文件
- Redis面试常问4-- 如何实现异步队列 Blpop key timeout
- 如何获取LanuchImage
- java入门之内部类
- 理解Lucene中的Analyzer
- 日更第4期-2015-1-19-openFrameworks系列第三讲-面向对象的小球们
- 我的面试标准:能干活、基础要好、有潜力!
- VBA—EXCEL操作集合—05
- 6.1 统计学基本原理
- shapefile文件格式转inp文件格式
- linux搭建服务器有什么用处,Linux配置dns服务器作用是什么?
- C++ 实现程序暂停
- 让Linux内核不再卡死在DHCP请求上
- C++青少年编程课程体系与教案
- java斜体_设置TextView样式(粗体或斜体)
- 使用CDN后网页无法访问怎么解决
热门文章
- main:处理命令行选项
- 前端学习JQuery篇03——基本操作(效果)
- StackExchange.Redis实现Redis发布订阅
- 一天一小段js代码(no.4)
- Safari、IE8、iPhone和BlackBerry在Pwn2Own竞赛中被挑落
- Oracle 性能诊断艺术 第四章 笔记
- 树链剖分+线段树 CF 593D Happy Tree Party(快乐树聚会)
- e.target与e.e.srcElement
- memcached全面剖析–5. memcached的应用和兼容程序(转)
- python3的文件编码问题