大家有没有用过DataRelation,我写了一个,不过怎么关联表的数据也不能删除~!!大家帮忙啊

ketao_78 2002-04-28 10:41:24
代码我我贴:
我用的是northwind的两个表orders employees

: Private Sub CreateConstraint()
' Declare parent column and child column variables.
Dim pCol As DataColumn
Dim cCol As DataColumn
Dim myFKC As ForeignKeyConstraint
' Set parent and child column variables.
pCol = DataSetOrder.Tables("Orders").Columns("EmployeeID")
cCol = DataSetOrder.Tables("Employees").Columns("EmployeeID")
myFKC = New ForeignKeyConstraint("SuppierFKConstraint", pCol, cCol)
' Set null values when a value is deleted.
myFKC.DeleteRule = Rule.SetNull
myFKC.UpdateRule = Rule.Cascade
myFKC.AcceptRejectRule = AcceptRejectRule.Cascade
' Add the constraint, and set EnforceConstraints to true.
DataSetOrder.Tables("Employees").Constraints.Add(myFKC)
DataSetOrder.EnforceConstraints = True
End Sub

Private Sub DataGrid2_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid2.DeleteCommand

'CreateRelation()
CreateConstraint()
Me.SqlCommand1.Parameters("@para1").Value = Me.Label1.Text
Me.SqlConnection1.Open()
Me.SqlCommand1.ExecuteNonQuery()


End Sub

大家看看~!
...全文
157 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
muddledman 2002-09-06
  • 打赏
  • 举报
回复
看来这个问题还挺重要,用DataRealation实现,已经调试通过。
建两个表
employ:id,name id主健
order1:orderid,id orderid主健

vb.net版本的

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
SqlConnection1.Open()
Dim str1 As String = "SELECT * FROM order1"
Dim str2 As String = "SELECT * FROM employ"

Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(str1, SqlConnection1)
Dim mybuilder1 As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(adapter1)

Dim adapter2 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(str2, SqlConnection1)
Dim mybuilder2 As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(adapter2)

Dim dataset As Data.DataSet = New Data.DataSet()
adapter1.Fill(dataset, "order1")
adapter2.Fill(dataset, "employ")
Dim datarelation1 As Data.DataRelation = New Data.DataRelation("relation1", dataset.Tables("employ").Columns("ID"), dataset.Tables("order1").Columns("ID"))
dataset.Relations.Add(datarelation1)
dataset.Tables("employ").Rows(0).Delete()
adapter2.Update(dataset, "employ")
adapter1.Update(dataset, "order1")

End Sub

Private Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Unload
SqlConnection1.Close()
SqlConnection1 = Nothing
End Sub
muddledman 2002-09-06
  • 打赏
  • 举报
回复
收藏!
ketao_78 2002-04-29
  • 打赏
  • 举报
回复
这个报错一般是什么引起的,高人看看
mbm 2002-04-29
  • 打赏
  • 举报
回复
我估计你的orders表中肯定有EmployeeId值在Employees表中不存在
ketao_78 2002-04-29
  • 打赏
  • 举报
回复
你好,我是这么写的:
Private Sub DataGrid2_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid2.DeleteCommand

CreateConstraint()

Dim index As Integer
index = e.Item.ItemIndex
DataSetOrder.Employees.Rows(index).Delete()
Me.SqlDataAdapter2.Update(Me.DataSetOrder)
Me.DataGrid2.DataBind()

End Sub


Private Sub CreateConstraint()
' Declare parent column and child column variables.
Dim pCol As DataColumn
Dim cCol As DataColumn
Dim myFKC As ForeignKeyConstraint
' Set parent and child column variables.
pCol = DataSetOrder.Tables("Employees").Columns("EmployeeID")
cCol = DataSetOrder.Tables("Orders").Columns("EmployeeID")
myFKC = New ForeignKeyConstraint("SuppierFKConstraint", pCol, cCol)
' Set null values when a value is deleted.
myFKC.DeleteRule = Rule.SetNull
myFKC.UpdateRule = Rule.Cascade
myFKC.AcceptRejectRule = AcceptRejectRule.Cascade
' Add the constraint, and set EnforceConstraints to true.
DataSetOrder.Tables("Orders").Constraints.Add(myFKC)
DataSetOrder.EnforceConstraints = True
End Sub

报错是:不能启用此约束,因为不是所有的值都具有相应的父值。
mbm 2002-04-29
  • 打赏
  • 举报
回复
对,jackyhx(飞不动的侠)的方法是最好的办法。
不过既然dataset提供了这项功能,试试也无妨。
mbm 2002-04-29
  • 打赏
  • 举报
回复
你先把orders和employees表都填充到一个dataset
然后建立这两个表的关联,建立两个DataColumn对象对应两个表主健和外健,然后ds.Relations.Add(你建立的daterelation对象)。你看看msdn中的datarelation类。
以后,你更改数据集中的主表时从表就会随着更改,这只是在数据集中。最后Sqldataadapter.Update(),将数据集中的更改写回数据库。
其实我也没写过上述代码,只是了解,共同进步吧
龙腾九霄 2002-04-29
  • 打赏
  • 举报
回复
在数据中做一个删除的trigger就可以了,不用这么麻烦的。
ketao_78 2002-04-29
  • 打赏
  • 举报
回复
多多向你们学习~!
ketao_78 2002-04-29
  • 打赏
  • 举报
回复
没事,谢谢你
知道错误的地方了,不过还是不知道实现我的想法
我用northwind数据库,里面的表orders 和employees
我是想把employees纪录删除时候,自动将orders的与employees关联的数据删除
ketao_78 2002-04-29
  • 打赏
  • 举报
回复
老是说“不能启用此约束,因为不是所有的值都具有相应的父值”
ketao_78 2002-04-29
  • 打赏
  • 举报
回复
可惜我这里还是出错
mbm 2002-04-29
  • 打赏
  • 举报
回复
看来这个问题还挺重要,用DataRealation实现,已经调试通过。
建两个表
employ:id,name id主健
order1:orderid,id orderid主健

string connstring="data source=mbm;initial catalog=kms_db;user id=mbm;password=mbm";
string querystring1="select * from employ";
string querystring2="select * from order1";

SqlConnection myconn=new SqlConnection(connstring);
SqlDataAdapter myadapter1=new SqlDataAdapter(querystring1,myconn);
SqlDataAdapter myadapter2=new SqlDataAdapter(querystring2,myconn);

SqlCommandBuilder mybuilder1=new SqlCommandBuilder(myadapter1);
SqlCommandBuilder mybuilder2=new SqlCommandBuilder(myadapter2);

DataSet ds=new DataSet();

myadapter1.Fill(ds,"employ");
myadapter2.Fill(ds,"order1");

DataRelation myrelation=new DataRelation("relation1",ds.Tables["employ"].Columns["Id"],ds.Tables["order1"].Columns["Id"]);
//注意,这行会自动创建外健约束

ds.Relations.Add(myrelation);

ds.Tables["employ"].Rows[0].Delete();//注意,这里只删除了employ表的一行数据

myadapter1.Update(ds,"employ");
myadapter2.Update(ds,"order1");

检查一下库表,order1中关于前面删除那行那个人的纪录也都删除了,所以可以判断dataset中表关联成功。
ketao_78 2002-04-28
  • 打赏
  • 举报
回复
你好,能不能给个例子给我看看
mbm 2002-04-28
  • 打赏
  • 举报
回复
你是在数据集中建立的relation,但你删除时操作的是数据库,你应该用sqldataadapter对象在数据集中操作,它会引发数据集中相关表的改变,然后update(),这样,数据库会发生改变。
不应该用sqlcommand对象操作数据库,这样你的表关联没用,因为你没有通过数据集。
还有,如果你用DataRealtion,一些主健,外健等信息会自动创建的。
mbm 2002-04-28
  • 打赏
  • 举报
回复
对不起,我上边的代码贴错地方了。

你自己想想怎么写吧!你主要的错误是:你是在dataset中建的关联,你必须利用sqldataadapter通过dataset更新库表,而sqlcommand是不经过dataset直接操纵数据库的。
walaqi 2002-04-28
  • 打赏
  • 举报
回复
你在更新完毕后,重新调用fill方法
SqlDataAdapter.Fill(DataSet,"tablename");
或者不要使用command对象进行更新,而是使用SqlDataAdapter.Update(DataSet,"tablename",version)得方法进行更新。首先在dataset中删除你要删除得行,然后调用dataAdapter得update方法。
不过要注意,在调用update方法前不要调用dataset得acceptChanges方法否则不会发生任何更新动作。
mbm 2002-04-28
  • 打赏
  • 举报
回复
因为你没有DataTextField

private void Page_Load(object sender, System.EventArgs e)
{

string connstring="data source=mbm;initial catalog=kms_db;user id=mbm;password=mbm";
string querystring="select * from person";

SqlConnection myconn=new SqlConnection(connstring);

myconn.Open();

SqlCommand mycommand=new SqlCommand(querystring,myconn);
SqlDataReader myreader=mycommand.ExecuteReader();

RadioButtonList1.DataSource=myreader;
RadioButtonList1.DataTextField="cName";
RadioButtonList1.DataBind();
}
编者在这本书时遇到了两个问题。第一个问题是关于数据结构教材。应该说关于数据结构的教材已经很多了。自从美国唐.欧.克努特教授用汇编语言的《计算机程序设计技巧》第一卷《基本算法》问世以来,已经出现了用PASCAL、C、C++、JAVA等语言数据结构书。所以,在编者本书之前,曾经感到很为难。目前,C#语言作为微软在新一代开发平台.NET推出的、完全面向对象的语言,凭着其简洁、高效、模板、标准化的特性,使得C#语言像程序设计语言中的一件艺术品,也吸引着越来越多的开发人员。这也使得我院的可视化专业进行专业改革时,决定以C#语言作为该专业的主要开发语言。所以说,用C#语言来讲授《数据结构》课程是我院专业改革的结果。而用C#语言数据结构教材目前国内基本上是空白。鉴于此,编者决定本书。 在接下来的作过程中,编者遇到了另外一个问题,那就是C#语言和.NET Framework的发展。当作者这本书时,是以C#语言和.NET Framework 的2.0版本来的。但是,到目前为止,C#语言和.NET Framework已经出现3.0版本了。这使得编者感到了微软技术的发展之快,发出了“学习微软的东西在某种程度上是一种痛苦”之叹!也使编者曾产生了放弃该书的念头。但作为教师的责任和对新东西的执著使得编者一直坚持,直到该书完稿。也附带说一句:如果读者在阅读过程中,发现有些技术不是最新的技术也不要惊奇,本书是以C#语言和.NET Framework2.0版本来的。 本书的内容 本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 本书特点 将数据结构与C#语言和.NET框架结合是本书的一大特点。.NET平台是微软推出的一个新的开发平台,目的是让“不同的语言共享同一平台”。.NET很可能成为下一代Windows操作系统的一部分。而C#语言作为新一代完全面向对象的语言,是.NET的母言。本书所有的数据结构和算法都是用C#语言进行描述,并在相应章节的末尾介绍了在.NET框架中常用的数据结构和算法。用C#在.NET平台开发的技术人员可以从本书中获得许多有益的知识和技术。
通过 ADO.NET 访问数据 ADO.NET 概述 ADO.NET 的设计目标:讨论创建 ADO.NET 的动机和设计目标。 ADO.NET 结构:提供 ADO.NET 结构和组件的概述。 .NET 数据提供程序:提供有关随 ADO.NET 提供的 .NET 数据提供程序和 .NET 数据提供程序的设计的概述。 ADO.NET DataSet:提供有关 DataSet 设计和组件的概述。 为 .NET 数据提供程序编通用代码:提供有关如何使用 ADO.NET 所提供的通用接口来编一组对于任何 .NET 数据提供程序都将运行的代码的信息。 ADO.NET 示例应用程序:提供 ADO.NET 应用程序的示例,该示例从数据库中检索数据并将其返回到控制台。   使用 .NET 数据提供程序访问数据 使用 ADO.NET 连接到数据源:描述 ADO.NET Connection 对象,并说明如何使用它来连接到数据源。 执行命令:描述 ADO.NET Command 对象,并说明如何使用它来对数据源执行查询和命令。 使用 DataReader 检索数据:描述 ADO.NET DataReader 对象,并说明如何使用它从数据源返回结果流。 将存储过程用于命令:描述如何使用 Command 对象来调用存储过程,并提供有关发送和检索参数值的信息。 从数据库中获取单个值:描述如何使用 Command 从数据库查询中返回单个值。 从数据库中获取 BLOB 值:描述如何使用 DataReader 从数据库中返回二进制大对象 (BLOB)。 执行数据库操作和修改数据:描述如何使用 Command 对数据源发出 INSERT、UPDATE 和 DELETE 命令,以及如何执行目录操作(如创建或更改)。 从 SQL Server 中以 XML 形式获取数据:描述如何使用 Command 以 XmlReader 形式返回 SQL Server FOR XML 查询的结果。 从 DataAdapter 填充 DataSet:描述如何通过 DataAdapter 来使用、列和行填充 DataSet。 使用 DataAdapter 和 DataSet 更新数据库:描述如何使用 DataAdapter 将对 DataSet 中数据的更改解析回数据源。 向 DataSet 添加现有约束:描述如何从数据源填充 DataSet 的约束(如主键列的唯一约束)。 设置 DataTable 和 DataColumn 映射:描述如何使用和列映射来提供从数据源中返回的列的应用程序特定名称。 将参数用于 DataAdapter:描述如何将参数用于 DataAdapter 的命令属性(包括如何将 DataSet 中列的内容映射到命令参数)。 输入和输出参数及返回值:描述如何将 DataSet 中列的内容映射到 DataAdapter 命令属性的输入和输出参数(包括如何从存储过程中检索返回值)。 自动生成的命令:描述如何使用 CommandBuilder 为具有单个 SELECT 命令的 DataAdapter 自动生成 INSERT、UPDATE 和 DELETE 命令。 使用 DataAdapter 事件:描述 DataAdapter 事件并说明如何使用这些事件。 从数据库中获取架构信息:解释如何从数据源中获取架构信息,如数据库或目录中的列。 执行事务:解释如何使用 Connection 和 Transaction 对象对数据源执行事务。 .NET 数据提供程序的代码访问安全性:描述随 .NET 框架提供的 .NET 数据提供程序的可用附加代码访问安全权限,并说明如何确定特定权限是否可用于所运行的代码。   创建和使用 DataSet 创建 DataSet:描述创建 DataSet 实例的语法。 向 DataSet 添加 DataTable:描述如何创建和列并将其添加到 DataSet 中。 添加间关系:描述如何创建 DataSet 中之间的关系。 导航间关系:描述如何使用 DataSet 中之间的关系来返回具有父子关系的子行或父行。 将 DataSet 与现有数据一起使用"描述如何使用 DataAdapter 将 DataSet 中的更改解析回数据源。 合并 DataSet 内容:描述如何将一个 DataSet、DataTable 或 DataRow 数组的内容并入另一个 DataSet。 复制 DataSet 内容:描述如何创建可包含架构和指定数据DataSet 副本。 使用 DataSet 事件:描述 DataSet 的事件并说明如何使用这些事件。 使用类型化的 DataSet:描述类型化 DataSet 并说明如何创建和使用类型化 DataSet。   XML 和 DataSet:描述 DataSet 如何与作为数据源的 XML 进行交互(包括以 XML 数据的形式加载和保持 DataSet 的内容)。 DiffGram:提供有关 DiffGram 的详细信息,DiffGram 是一种用于读 DataSet 内容的 XML 格式。 从 XML 中加载 DataSet:讨论在从 XML 文档中加载 DataSet 内容时需考虑的不同选项。 以 XML 数据形式编 DataSet:讨论如何以 XML 数据的形式生成 DataSet 的内容以及可使用的不同 XML 格式选项。 从 XML 中加载 DataSet 架构信息:讨论用于从 XML 中加载 DataSet 架构的 DataSet 方法。 以 XML 架构 (XSD) 形式编 DataSet 架构信息:讨论 XML 架构的用途以及如何从 DataSet 生成 XML 架构。 使 DataSet 与 XmlDataDocument 同步:讨论同步访问单个数据集的关系和分层视图的 .NET 框架中的可用功能,并解释如何在 DataSet 和 XmlDataDocument 之间创建同步关系。 嵌套的 DataRelation:讨论嵌套 DataRelation 对象在以 XML 数据形式DataSet 内容时的重要性,并描述如何创建这些对象。 从 XML 架构 (XSD) 生成 DataSet 关系结构:描述从 XML 架构定义语言 (XSD) 架构创建的 DataSet 的关系结构(即架构)。 将 XML 架构 (XSD) 约束映射到 DataSet 约束:描述用于在 DataSet 中创建唯一和外键约束的 XML 架构元素。 从 XML 架构 (XSD) 生成 DataSet 关系:描述用于在 DataSet 中各列间创建关系的 XML 架构元素。 了解约束和关系之间的相互关系:描述当使用 XML 架构元素在 DataSet 中创建约束时如何隐式地创建关系。   从 XML 推断 DataSet 关系结构:描述在从 XML 元素进行推断时所创建的 DataSet 的结果关系结构(即架构)。   创建和使用数据:描述如何创建和自定义 DataTable 对象。 创建数据:说明如何创建 DataTable 并将其添至 DataSet。 定义数据的架构:提供有关创建和使用 DataColumn 对象和约束的信息。 在数据中操作数据:说明如何添加、修改和删除中的数据。说明如何使用 DataTable 事件来检查对数据的更改。   创建和使用 DataView:描述如何创建 DataTable 中数据的动态视图,这些视图通常用于数据绑定应用程序。 创建 DataView:描述如何为 DataTable 创建 DataView。 使用 DataView 对数据排序和筛选:描述如何设置 DataView 的属性,以按照特定筛选条件返回数据行的子集或以特定排序顺序返回数据。 使用 DataView 查看数据:描述如何访问 DataView 的内容,在 DataView 中查找特定的数据行,以及基于父子关系创建数据的视图。 使用 DataView 修改数据:描述如何通过 DataView 修改基础 DataTable 中的数据(包括启用或禁用更新)。 使用 DataView 事件:描述如何使用 ListChanged 事件接收在 DataView 的内容或顺序得到更新时发出的通知。 使用 DataViewManager 设置默认视图:描述如何使用 DataViewManager 来管理 DataSet 中每个DataView 设置。   从 ADO.NET 访问 ADO 记录集或记录:描述如何使用 OleDbDataAdapter 从 ADO 记录或记录集填充 DataSet。 ADO.NET 方案示例:提供数据识别应用程序的常见编程方案的示例,并使用 ADO.NET 提供这些方案的解决方案。 检索“标识”或“自动编号”值:提供一个特定示例,它将为 Microsoft SQL Server 中的“标识”(Identity) 字段所生成的值以及 Microsoft Access 中的“自动编号”(Autonumber) 字段映射到中插入行的列。 开放式并发:描述开放式并发模型,并提供有关如何使用 ADO.NET 测试是否存在开放式并发冲突的示例。 从 XML Web services 使用 DataSet:提供一个 XML Web services 的示例,该示例以 DataSet 的形式返回数据源中的数据,另外还接收更新的 DataSet 并将更改解析回数据源。 查询结果分页:提供有关以数据页的形式查看查询结果的示例。   实现 .NET 数据提供程序:描述如何为数据存储区创建自定义 .NET 数据提供程序,并为您提供模板代码。 .NET 数据提供程序实现入门:为定义 .NET 数据提供程序提供信息和建议,其中包括有关可用于实现的接口的说明和有关为提供程序创建命名空间的信息。 实现连接:描述连接的特性,并说明如何为 .NET 数据提供程序实现您自己的连接。 实现命令:描述命令的特性,并说明如何为 .NET 数据提供程序实现您自己的命令。 实现 DataReader:描述 DataReader 的特性,并说明如何为 .NET 数据提供程序实现您自己的 DataReader。 实现 DataAdapter:描述 DataAdapter 的特性,并说明如何为 .NET 数据提供程序实现您自己的 DataAdapter。 示例 .NET 数据提供程序:包含 .NET 数据提供程序的示例实现。   数据数据集介绍:提供什么是 ADO.NET 数据集、如何对它们进行类型化或非类型化、它们的用途及结构的概述。 用于创建数据集的 Visual Studio 工具:描述 Visual Studio 提供了哪些允许创建数据集的功能,以及在何时选用什么样的工具。 用组件设计器创建类型化数据集:描述在窗体或组件中工作时如何创建数据集。 用达式创建数据集列:描述如何在数据中定义基于计算或其他达式(而不是直接基于数据源中的数据)的列。 将添加到现有数据集:描述如何在以前创建的类型化数据集中创建新数据。 将现有类型化数据集添加到窗体或组件:描述如何在窗体或组件上创建数据集的实例。 将非类型化数据集添加到窗体或组件:描述如何创建无关联架构的数据集。 演练:将数据映射到数据:描述如何基于另一个架构,使用数据适配器和列映射从数据库将数据加载到数据集。 数据适配器 数据适配器介绍:提供有关数据适配器的定义、用途和结构的概述。 数据适配器命令中的参数:描述适配器在运行时传递给 SQL 语句或存储过程的参数的结构和用途。 数据适配器中的映射:描述如何在源数据之间映射列名的选项。 创建数据适配器:列出在 Visual Studio 中创建数据适配器的各种方法。 为数据适配器配置参数:解释如何创建将在运行时传递给数据适配器命令的参数并设置其属性。 将数据源列映射到数据数据列:提供有关如何建立和修改源数据的列名之间映射的说明。 预览数据适配器的结果:提供有关测试数据适配器填充数据集的方式的说明。 数据连接 与 ADO 的早期版本和其他数据访问组件相比,ADO.NET 提供了若干好处。这些好处分成以下几个类别: 互操作性 ADO.NET 应用程序可以利用 XML 的灵活性和广泛接受性。由于 XML 是用于在网络中传输数据集的格式,因此可以读取 XML 格式的任何组件都可以处理数据。实际上,接收组件根本不必是 ADO.NET 组件:传输组件可以只是将数据集传输给其目标,而不考虑接收组件的实现方式。目标组件可以是 Visual Studio 应用程序或无论用什么工具实现的其他任何应用程序。唯一的要求是接收组件能够读取 XML。作为一项工业标准,XML 正是在谨记这种互操作性的情况下设计的。 可维护性 在已部署系统的生存期中,适度的更改是可能的,但由于十分困难,所以很少尝试进行实质的结构更改。这是很遗憾的,因为在事件的自然过程中,这种实质上的更改会变得很有必要。例如,当已部署的应用程序越来越受用户欢迎时,增加的性能负荷可能需要进行结构更改。随着已部署的应用程序服务器上的性能负荷的增长,系统资源会变得不足,并且响应时间或吞吐量会受到影响。面对该问题,软件设计者可以选择将服务器的业务逻辑处理和用户界面处理划分到单独计算机上的单独层上。实际上,应用程序服务器层将替换为两层,缓解了系统资源缺乏。 该问题并不是要设计三层应用程序。相反,它是要在应用程序部署以后增加层数。如果原始应用程序使用数据集以 ADO.NET 实现,则该转换很容易进行。请记住,当用两层替换单个层时,将安排这两层交换信息。由于这些层可以通过 XML 格式的数据集传输数据,所以通讯相对较容易。 可编程性 Visual Studio 中的 ADO.NET 数据组件以不同方式封装数据访问功能,帮助您加快编程速度并减少犯错几率。例如,数据命令提取生成和执行 SQL 语句或存储过程的任务。 同样,由这些工具生成的 ADO.NET 数据类导致类型化数据集。这又使您可以通过已声明类型的编程访问数据。例如,请考虑下面这行代码(它访问未声明类型的数据集内的数据成员): ' Visual Basic If TotalCost > DataSet1.Tables("Customers").Rows(i)("AvailableCredit") Then // C# if (TotalCost > DataSet1.Tables["Customers"].Rows[i]["AvailableCredit"]) { } 访问已声明类型的数据集内的数据成员的等效代码行如下所示: ' Visual Basic If TotalCost > DataSet1.Customers("Jones").AvailableCredit Then // C# if(TotalCost > DataSet1.Customers("Jones").AvailableCredit) { } 已声明类型的数据集的代码更易阅读。因为提供了语句结束,所以它还便于编。例如,“AvailableCredit”在完成以下语句的选择列中: IF TotalCost > Customer. 最后,已声明类型的数据集的代码更安全,原因在于它提供对类型的编译时检查。例如,假定 AvailableCredit 达为货币值。如果程序员误向 AvailableCredit 分配了字符串值,则环境会在编译时向程序员报告该错误。当使用未声明类型的数据集时,程序员直到运行时才会知道该错误。 有关类型化数据集和非类型化数据集的更多信息,请参阅数据集介绍。 性能 对于不连接的应用程序,ADO.NET 数据库提供的性能优于 ADO 不连接的记录集。当使用 COM 封送在层间传输不连接的记录集时,会因将记录集内的值转换为 COM 可识别的数据类型而导致显著的处理开销。在 ADO.NET 中,这种数据类型转换则没有必要。 可伸缩性 因为 Web 可以极大增加对数据的需求,所以可缩放性变得很关键。Internet 应用程序具有无限的潜在用户供应。尽管应用程序可以很好地为十几个用户服务,但它可能不能向成百上千个(或几百万个)用户提供同样好的服务。使用数据库锁和数据库连接之类资源的应用程序不能很好地为大量用户服务,因为用户对这些有限资源的需求最终将超出其供应。 ADO.NET 通过鼓励程序员节省有限资源来实现可缩放性。由于所有 ADO.NET 应用程序都使用对数据的不连接访问,因此它不会在较长持续时间内保留数据库锁或活动数据库连接。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧