千家信息网

ADO.Net类型化DataSet有什么用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了ADO.Net类型化DataSet有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、弱类型DataSet的缺
千家信息网最后更新 2026年11月02日ADO.Net类型化DataSet有什么用

这篇文章主要介绍了ADO.Net类型化DataSet有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、弱类型DataSet的缺点:
1、只能通过列名引用,dataset.Tables[0].Rows[0]["Age"],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名。
2、int age=Convert.ToInt32(dataset.Rows[0]["Age"]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错。
3、将DataSet传递给其他使用者,使用者很难识别出有哪些列可以供使用。
4、运行时才能知道所有列名,数据绑定麻烦,无法使用Winform、ASP.Net的快速开发功能。
5、自己动手写强类型DataSet(类型化DataSet,TypedDataSet),创建继承自DataSet的PersonDataSet类,封装出int? Age等属性和bool IsAgeNull等方法,向PersonDataSet中填充。

二、VS自动生成强类型DataSet:
1、步骤:添加->新建项->数据集
2、将表从服务器资源管理器拖放到DataSet中。注意拖放过程是自动根据表结构生成强类型DataSet等类,没有把数据也拖过来,程序还是连的那个数据库,自动将数据库连接字符串写在了App.Config中。
3、代码中使用DataSet示例:CC_RecordTableAdapter adapter=new CC_RecordTableAdapter();如何得知Adapter的类名?选中DataSet中下半部分的Adapter,Name属性就是类名。需要右键点击类名->解析
4、取得所有的数据:adapter.GetData(),例子程序:遍历显示所有数据,i5、常见问题:类名敲不对,表名+TableAdapter,表名+DataTable,表名+Row,然后用"解析"来填充类名。
6、常见问题:类的内部定义的类要通过包含namespace的全名来引用,不能省略。类的内部定义的类就能避免同一个namespace下类不能重名的问题。

三、更新DataSet:
1、调用Adapter的Update方法就可以将DataSet的改变保存到数据库。adapter.Update(datatable);
2、要调用Update方法更新必须设置数据库主键,同样,Delete方法也是如此;
3、常见错误:"当传递具有已修改行的DataRow集合时,更新要求有效的UpdateCommand",要为表设置主键。"谁都变了,唯有主键不会变",程序要通过主键来定位要更新的行。忘了设主键怎么办?先到数据库中设置主键,然后在DataSet的对应DataTable上点击右键,选择"配置",在对话框中点击"完成"。好习惯:所有表都要设置主键!!!看看为什么会自动帮我们GetData、Update、Delete。
现在做个简单的练习:
第一步:添加一个数据库,名为DB1.mdf(表T_Persons含有Id,Name,Age字段)
第二步:添加一个应用程序配置文件:App.config文件,其代码如下:

代码如下:






connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB1.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />



第三步:再添加一个数据集文件:DataSetPersons.xsd,并将表T_Persons拖到数据集上。
第四步:在窗体Form1界面放一按钮,当单击它时逐个地显示出数据库表里的所有Name。窗体代码如下:

复制代码 代码如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using 类型化DataSet.DataSetPersonsTableAdapters;

namespace 类型化DataSet
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Show_Click(object sender, EventArgs e)
{
//表名+TableAdapter,表名+DataTable,表名+Rows,然后用"解析"来填充类名
T_PersonsTableAdapter adapter = new T_PersonsTableAdapter();
类型化DataSet.DataSetPersons.T_PersonsDataTable personsTable = adapter.GetData();
for (int i = 0; i < personsTable.Count; i++)//假如是personsTable.Rows.Count则变为弱类型了
{
类型化DataSet.DataSetPersons.T_PersonsRow person = personsTable[i];
MessageBox.Show(person.Name);
}
}
}
}

提醒:对于上面引用类内部的类的情况,写类时的方法是:表名+TableAdapter,表名+DataTable,表名+Rows,然后用"解析"来填充类名。

四、其它问题:
1、插入新行,调用Insert方法。
2、数据库表中增加了字段后怎么办?DataSet设计器中点【配置】,对话框中点【查询生成器】,勾选新增加的字段即可。删除字段同样如此。
3、要修改字段就要重新配置生成,这就是强类型DataSet的弱点。
4、常见错误:报错、数据为空。判断列的值为空的方法:Is**Null
5、为什么Select方法会填充、Update方法会更新、Insert方法会插入?看看Adapter的SelectCommand等属性就知道了,都是那些SQL语句在起作用,如果有需要完全可以手工调整。 如:

代码如下:

personsTable[0].Name = "Lucy";
adapter.Update(personsTable);//调用Update方法将对数据集的修改更新到数据库
adapter.Insert("John", 50);

感谢你能够认真阅读完这篇文章,希望小编分享的"ADO.Net类型化DataSet有什么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

数据 类型 方法 数据库 代码 类名 字段 更新 常见 程序 篇文章 问题 配置 属性 文件 错误 生成 中点 使用者 对话框 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 朗新科技与工业互联网 科技服务与互联网 万易互联网科技有限公司 九亚互联网科技 极限挑战互联网科技 丰台科技园 互联网 互联网科技素材视频竖屏 衡水科技产业互联网平台 深圳互联网科技怎么样 互联网公司会议桌创意科技软装饰 互联网科技产品 金融科技与互联网金融相同和不同 昊天互联网科技有限公司 中国互联网十大科技股排名 互联网科技的全部知识 元气玛特互联网科技公司是外包吗 互联网第三次科技革命特征 广州富喜互联网络科技 云南省自由互联网科技有限公司 互联网科技企业文化 云信互联网科技有限公司 北京互联网科技公司 互联网科技的英文 互联网 视角下的科技创新 互联网金融 科技创新 互联网科技生活的内容 互联网相关科技技术 有人说阿里系是互联网科技企业 互联网科技对化妆品行业 安徽九吞吴互联网科技有限公司
0