C# 2005 数据库访问(四)

VS2005 C#开发Windows Mobile 5.0 智能设备程序  VS2005 C#开发Windows Mobile 5.0 智能设备程序一.Visual Studio 2005中配置Windows Mobile 5.0开发环境安装的软件包: Microsoft ActiveSync 4.2 Windows Mobile 5.0 Pocket PC SDK Windows Mobile 5.0 Emulator Images for Pocket 阅读详情
 在DataSet中访问多个表。

       ADO.NET模型与原来的数据访问模型相比,有一个最大的优点:DataSet对象可以记录多个表和他们之间的关系。也就是说在一个操作的不同程序段之间传递完整的相关数据集,体系结构内在地维护数据之间关系的完整性。

       DataRelation对象用于描述在DataSet中的多个DataTabels之间的关系。每一个DataSet都有DataRelations的DataRelation集合,这可以确认和操作相关的表。

        下面我们就以Customers和Orders表为例。在两个表中的匹配的CustomerID域定义Customers表和Orders表之间的一对多的关系,为此要创建一个代表这种关系的DataRelation对象。

下面为导航关系代码,关键代码已经加粗:

using System;

using System.Data;

using System.DataSqlClient;

class DataRelationExample{

    public static void Main(){

        //Specify SQL Server-specific connection string

        SqlConnection thisConnection = new SqlConnection(

        @"Data Source=(local);Integrated Security=SSPI;Initial Catalog=northwind");

        // Open connection

        thisConnection.Open();

        // Create DataAdapter object for update and other operations

        SqlDataAdapter thisAdapter=new SqlDataAdapter(

        "SELECT CustomerID,CompanyName FROM Customers",thisConnection);

        // Create CommandBuilder object to build SQL commands

        SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);

        // Create DataSet to contain related data tables,rows,and columns

        DataSet thisDataSet = new DataSet ();

        // Set up DataAdapter object for each tabel and fill

        SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM Customers",thisConnection);

        SqlDataAdapter orderAdapter = new SqlDataAdapter("SELECT * FROM Orders",thisConnection);

        custAdapter.Fill(thisDataSet,"Customers");

        orderAdapter.Fill(thisDataSet,"Orders");

        // Set up DataRelation between customers and orders

        DataRelation custOrderRel = thisDataSet.Relations.Add("CustOrders",thisData.Tables["Customers"].Columns["CustomerID"],thisData.Tables["Orders"].Columns["CustomerID"]);

        // Print out nested customers and their order ids

        foreach (DataRow custRow in thisDataSet.Tables["Customers"].Rows){

               Console.WriteLine("Customer ID:" +custRow["CustomerID"]+"Name:"+custRow.[""CompanyName]);

               foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel)){

                      Console.WriteLine("      OrderID:" + orderRow["OrderID"]);

               }

        }                                

        thisConnection.Close();

    }

}

        下面将进一步扩展此程序,研究每一位顾客在订单中所定购的集体产品,以及具体产品的名称。为此需要Customers,Orders,Orders Details,Products这4个表。与前面的代码相似,首先初始化连接,然后为每一表创建一个DataAdapter对象:

       SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM Customers",thisConnection);

        custAdapter.Fill(thisDataSet,"Customers");

        SqlDataAdapter orderAdapter = new SqlDataAdapter("SELECT * FROM Orders",thisConnection);

        orderAdapter.Fill(thisDataSet,"Orders");       

        SqlDataAdapter detailAdapter = new SqlDataAdapter("SELECT * FROM [Order Details]",thisConnection);

        detailAdapter.Fill(thisDataSet,"Order Details");       

        SqlDataAdapter prodAdapter = new SqlDataAdapter("SELECT * FROM Products",thisConnection);

        prodAdapter.Fill(thisDataSet,"Products");

        为4个表之间的每一种关系构建DataRelation对象:

        DataRelation custOrderRel = thisDataSet.Relations.Add("CustOrders",thisData.Tables["Customers"].Columns["CustomerID"],thisData.Tables["Orders"].Columns["CustomerID"]);

        DataRelation orderDetailRel = thisDataSet.Relations.Add("OrderDetail",thisData.Tables["Orders"].Columns["OrderID"],thisData.Tables["Order Details"].Columns["OrderID"]);

        DataRelation orderProdRel = thisDataSet.Relations.Add("OrderProducts",thisData.Tables["Products"].Columns["ProductID"],thisData.Tables["Order Details"].Columns["ProductID"]);

        下面是这些关系的处理工作,利用一个foreach三级嵌套来完成:

         foreach (DataRow custRow in thisDataSet.Tables["Customers"].Rows){

               Console.WriteLine("Customer ID:" +custRow["CustomerID"]);

               foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel)){

                      Console.WriteLine("/tOrderID:" + orderRow["OrderID"]);

                      Console.WriteLine("/tOrder Date:" + orderRow["OrderDate"]);

                      foreach (DataRow detailRow in orderRow.GetChildRows(orderDetailRel)){

                             Console.WriteLine("/t/tProduct:" + detailRow.GetParentRow(orderProductRel)["ProductName"]);

                             Console.WriteLine("/tQuantity:" + detailRow["Quantity"]);

                      }

               }

        }

        上面代需要注意的地方:为了获取Product行,可以调用GetParentRow(),可以获得父对象,从关系的“多”端进入“一”端。有时这种从子对象进入父对象的导航也称为“逆流”导航。从父对象进入子对象的导航也称为“顺流”导航。

        ChildRelations和ParentRelations集合

        DataTable具有属性ChildRelatons,它保存所有的DataRelations的集合,当前的表以父关系的身份加入到DataRelations中。使用方法:

         foreach(DataRelation thisRelation in thisTable.ChildRelations){

                 foreach(DataRow thisParentRow in thisTable.Rows){

                          foreach(DataRow thisChildRow in thisParentRow.GetChildRows(thisRelation)){

                                 //...process child rows...

                          }

                 }

         }

         在DataTable上还有ParentRelation集合,可以按类似的方式使用DataTable。

<注:>本文参考文献

《C#入门经典》清华大学出版社

C#中实现存储图片到SQLServer2005  在论坛中碰到有朋友问到如和把图片存到数据库中,自己用VS2005+SQLServer2005实现了这个功能.上面是主界面上面是显示界面数据库为Picture,数据表为Picture,表结构设计如下所示:PictureID int 4,          PictureContent Image,        PictureText nvarchar(50)下面是主界 阅读详情

相关推荐

c#项目开发数据库的连接访问

数据层功能设计 database.cs 数据库连接桥 用来连接数据库 实现功能方法为:打开/关闭数据库连接,执行数据的增删改查。 1.打开数据库连接的open方法 主要通过Sqlconnection类实现,并初始化数据库连接字符串,通过state属性判断连接状态,如果数据库连接状态为关,则打开数据库。 usingSystem; usingSystem.Data; ...

qq_38347957的博客 843

c#学习(七)--DataRelation使用

c#学习(七)--DataRelation使用

ChenJin_2的博客 569

全面掌握Visual C# 2005开发技术

本文还有配套的精品资源,点击获取 简介:《Visual C# 2005开发技术》深入讲解C#编程语言核心概念、.NET Framework基础及Visual Studio 2005软件开发方法。本书涵盖了面向对象编程、控制流语句、数组与集合、函数与委托、异常处理、CLR、应用程序域、类库、IDE使用、项目管理、调试工具、设计师、数据库访问、***、LINQ、Web编程、AJ...

weixin_32099703的博客 1749

DataRelation

DataRelation 的一项主要功能就是在 DataSet 中从一个 DataTable 浏览到另一个。它使您能够在给定相关 DataTable 中的单个 DataRow 的情况下检索一个 DataTable 中的所有相关 DataRow 对象。例如,当建立客户表和订单表之间的 DataRelation 后,可以使用 GetChildRows 检索特定客户行的所

langxiaodi的专栏 2023

DataSet中建立两个 DataTable 对象之间的父/子关系

1。建立两个 DataTable 对象之间的父/子关系>>>>DataColumn parentCol;    DataColumn childCol;    parentCol = DataSet1.Tables["Customers"].Columns["CustID"];    childCol = DataSet1.Tables["Orders"].Columns["CustID"];  

Aone --- 无限的未知 1233

C#语言中的组件Datarelation使用实例代码详解

C#语言中的组件包括有DataSet(DataTable、DataRow、DataColumn、DataRelation、Constraints、DataView)。Datarelation是基于公共键建立父()表和子(详细资料)表之间的关系。Datarelation的作用在于可以使与正在使用的记录相关的记录可用(如使用父记录时提供子记录,如使用子记录则提供父记录);然后还可以强制约束的引用完...

月亮哥的专栏 4191

C# DataSet DataRelation使用记录

【代码】C# DataSet DataRelation使用记录。

Cecile0828的博客 267

C# 2005 访问数据库(一)

      这几天在网上找C# 2005访问数据库的资料,可是没有找到特别实用、详细的。所以自己就只能一边看MSDN,一边问同事,还好顺利完成了。现在闲下来把这些东西整理了一下,以供大家参考。       Microsoft. NET FrameWork数据库访问采用ADO.NET技术。ADO.NET提供两种内置的.NET数据提供者。一种用于OLE DB数据源,一种用于Microsoft SQ

JobsMeng的专栏 671

C# 2005数据库编程权威指南及实践

本文还有配套的精品资源,点击获取 简介:本书是关于使用C# 2005数据库进行交互的详尽教程,旨在帮助开发者精通数据库编程的核心技能与最佳实践。介绍了.NET Framework 2.0中的***框架的使用,涵盖数据连接、SQL命令执行、数据适配器、数据集和数据表操作、数据绑定、事务处理、错误处理和性能优化、数据库提供者扩展,以及后续版本中重要的LINQ to SQL等内...

weixin_30481539的博客 873

C#数据库开发实战案例源码解析

本文还有配套的精品资源,点击获取 简介:本压缩包提供了使用C#语言开发数据库应用程序的案例源码,涵盖.NET框架下的Visual C# 2005开发环境。它包括与数据库如SQL Server交互的示例代码,实现数据的CRUD操作,以及如何处理数据绑定和事务。源码有助于学习者理解数据库开发的关键概念,包括***的使用、数据库连接配置、数据访问层设计、以及事务和错误处理的实现。...

weixin_42561464的博客 2000

从入门到精通:Visual C# 2005编程教程

本文还有配套的精品资源,点击获取 简介:《Visual C# 2005从入门到精通》是一本由周靖翻译的C#编程语言教程,旨在指导初学者和经验丰富的开发者全面掌握Visual C# 2005的编程技巧。本书从基础知识开始,覆盖了C#语法、.NET Framework核心概念、Visual Studio 2005的使用方法,以及.NET Framework类库的应用。本书还介绍...

weixin_42602726的博客 912

C#与SQL Server 2005数据库创建指南

实体数据模型(EDM)是一种用于描述数据结构的抽象层,它基于Entity-Relationship(ER)模型构建,允许开发者以面向对象的方式操作数据。EDM可以表示任何数据源的结构,比如数据库或Web服务,并允许开发者通过统一的API与这些数据源交互。使用EDM的优势包括:数据抽象和独立性:EDM允许开发者关注数据的逻辑模型,而不必担心底层数据源的差异,从而实现对多种数据源的统一访问。高级查询能力:支持声明式查询(如LINQ),允许编写接近自然语言的查询语句。

weixin_29840475的博客 1082

C# 实现 SQL Server 2005 数据库的脚本自动生成

本文还有配套的精品资源,点击获取 简介:在软件开发中,数据库管理是核心任务之一,C#语言结合SQL Server 2005提供了高效的数据操作能力。本文详细介绍了如何使用C#编写SQL脚本以自动化创建和管理SQL Server 2005数据库的流程,涉及到的技术包括SQL脚本、***框架和自动化部署。文中提供了C#代码示例,说明了创建数据库的具体步骤,并探讨了“runsql...

weixin_30248619的博客 555

基于C#和SQL Server 2005的售票管理系统设计与实现

在当今快节奏的科技环境中,一个高效、安全的售票管理系统是不可或缺的。C#作为一种现代、面向对象的编程语言,结合其强大的.NET框架,为开发企业级应用提供了极大的便利。C#售票管理系统不仅要求能够处理日常的售票业务,包括票务的查询、预订、支付和出票等,而且需要具备良好的用户体验和高效的系统性能。本章将概述C#售票管理系统的业务需求、系统功能以及开发前的准备工作。

weixin_35094083的博客 667

C# 创建SQL Server 2005数据库及建表

C# 创建SQL Server 2005数据库及建表   2010-10-28 17:39:46|  分类: C# |  标签:c#  创建数据库  建表  system.data.sqlclient   |字号大中小 订阅 using System; using System.Collections.Generic; using System.Text; usi

quxiao2002的专栏 4468

SQL Server 2005数据库导入导出完整图解教程

SQL Server 2005是微软在数据库领域的重要里程碑版本,首次引入了多项增强功能,特别是在数据导入导出、集成服务(SSIS)和管理工具方面实现了重大突破。其强大的数据迁移能力使其广泛应用于企业级数据整合、系统升级、数据备份与恢复等关键场景。本章将从整体视角出发,简要介绍SQL Server 2005的核心功能模块,重点阐述其在多数据源环境下的导入导出机制。通过理解其在ETL(抽取、转换、加载)流程中的角色,读者将为后续章节中深入掌握SSIS、SSMS操作及数据迁移最佳实践打下坚实基础。

weixin_42591908的博客 1290

c# 创建SQL Server2005数据库及建表

创建数据库代码,先判断有没有数据库,没有则创建,废话不多说,代码如下: private const string DB_NAME = @"safety_hidden"; private const string DB_PATH = @"E:\"; private string ConnectionString = @"Integrated Secu

米奇老鼠 6453

VC# 2005 SQL Server 2005数据库与网络开发

本书基于微软的.NET框架和数据库SQL Server 2005服务器技术,详细全面地介绍了该框架下的C# 2.0技术,以及如何基于该编程语言实现基于数据库的程序开发。全书分为6篇。第一篇介绍了C#语言的基础知识,包括C#简介和C#语言基础;第二篇介绍了数据库SQL 2005的相关知识,包括数据库的操作、数据查询语言基础以及数据报表的相关概念;第三篇介绍了ADO.NET的相关知识,包括数据库

我的学习日志 672
上一篇: C# 2005 访问数据库(三)
下一篇: C# 2005 数据库访问(五)
JobsMeng
博客等级 码龄20年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值