数据库填充DataSet,逐行访问
2016-03-24 22:04
260 查看
DataSet 对象是 Microsoft .NET 框架中数据访问的关键部分,是可保存表、视图和关系的内存中对象。本文介绍如何使用一个或多个数据库查询的结果填充 DataSet 对象,以及在将这些数据加载到 DataSet 对象中后如何访问这些数据。
回到顶端
若要将数据从数据库加载到 DataSet 中,请按照下列步骤操作:
启动 Visual Studio .NET。
在 Visual C# .NET 中新建一个"控制台应用程序"项目。Visual Studio .NET 为您创建一个静态类和一个空的 Main 过程。
确保项目引用 System 和 System.Data 这两个名称空间。
对 System、System.Data 和 System.Data.SqlClient 名称空间使用 using 语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。必须在任何其他声明之前使用这些语句。
从数据库向 DataSet 获取数据的第一步是建立数据库连接,这需要一个System.Data.SqlClient.SqlCommand 对象和一个连接字符串。下面代码中的连接字符串连接着位于本地计算机(运行这些代码的计算机)上的 SQL Server 服务器。您必须根据环境相应地修改该连接字符串。创建SqlConnection 对象后,请调用该对象的 Open 方法以建立实际的数据库链接。
创建一个 DataAdapter 对象,它表示数据库和 DataSet 对象之间的链接。您可以将 SQL 或另一类型的用于检索数据的命令指定为 DataAdapter 的构造函数对象的一部分。下面的示例使用了一个 SQL 语句从 Pubs 数据库的 Authors 表检索记录。
必须声明并创建 DataSet 对象的一个实例,此时您应为整个 DataSet 提供一个名称,然后才能开始加载任何数据。该名称可包含若干独立的表。
SqlDataAdapter 类提供 Fill 和 FillSchema 两种方法,这对于加载这些数据很关键。这两种方法均可将信息加载到 DataSet 中。Fill 加载数据本身,而 FillSchema 加载有关特定表的所有可用的元数据(如列名、主键和约束)。处理数据加载的正确方式是先运行 FillSchema,后运行 Fill。例如:
如果您只使用 Fill,则只能加载描述列名和数据类型所需要的基本元数据。Fill 方法不加载主键信息。若要更改此默认行为,可以将 DataAdapter 对象的 MissingSchemaAction 属性设置为MissingSchemaAction.AddWithKey,该属性会将主键元数据与默认信息一起加载。例如:
这些数据此时作为 DataSet 的 Tables 集合内独立的 DataTable 对象来提供。如果您在对FillSchema 和 Fill 的调用中指定了一个表名,则可以使用该名称访问您需要的特定表。
可以使用 For Each 循环依次通过一个 DataTable 的 Rows 集合内所有 DataRow 对象。这将使您能够访问表的每一行。可以按名称或按位置索引("0"是第一个列位置)访问列。例如:
回到顶端
填充 DataSet
System.Data 名称空间使用多种对象,您可以连接到一个数据库服务器,运行查询,然后把结果放到DataSet 对象中。DataSet 是断开连接的对象。因此,加载数据后,在您想加载更多数据或想使用您对这些信息的内存中副本所作的更改更新服务器之前,不会再使用与数据库的连接。若要将数据从数据库加载到 DataSet 中,请按照下列步骤操作:
启动 Visual Studio .NET。
在 Visual C# .NET 中新建一个"控制台应用程序"项目。Visual Studio .NET 为您创建一个静态类和一个空的 Main 过程。
确保项目引用 System 和 System.Data 这两个名称空间。
对 System、System.Data 和 System.Data.SqlClient 名称空间使用 using 语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。必须在任何其他声明之前使用这些语句。
using System; using System.Data; using System.Data.SqlClient;
从数据库向 DataSet 获取数据的第一步是建立数据库连接,这需要一个System.Data.SqlClient.SqlCommand 对象和一个连接字符串。下面代码中的连接字符串连接着位于本地计算机(运行这些代码的计算机)上的 SQL Server 服务器。您必须根据环境相应地修改该连接字符串。创建SqlConnection 对象后,请调用该对象的 Open 方法以建立实际的数据库链接。
string sConnectionString; sConnectionString = "Password=myPassword;User ID=myUserID;" + "Initial Catalog=pubs;" + "Data Source=(local)"; SqlConnection objConn = new SqlConnection(sConnectionString); objConn.Open();
创建一个 DataAdapter 对象,它表示数据库和 DataSet 对象之间的链接。您可以将 SQL 或另一类型的用于检索数据的命令指定为 DataAdapter 的构造函数对象的一部分。下面的示例使用了一个 SQL 语句从 Pubs 数据库的 Authors 表检索记录。
SqlDataAdapter daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
必须声明并创建 DataSet 对象的一个实例,此时您应为整个 DataSet 提供一个名称,然后才能开始加载任何数据。该名称可包含若干独立的表。
DataSet dsPubs = new DataSet("Pubs");
SqlDataAdapter 类提供 Fill 和 FillSchema 两种方法,这对于加载这些数据很关键。这两种方法均可将信息加载到 DataSet 中。Fill 加载数据本身,而 FillSchema 加载有关特定表的所有可用的元数据(如列名、主键和约束)。处理数据加载的正确方式是先运行 FillSchema,后运行 Fill。例如:
daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors"); daAuthors.Fill(dsPubs,"Authors");
如果您只使用 Fill,则只能加载描述列名和数据类型所需要的基本元数据。Fill 方法不加载主键信息。若要更改此默认行为,可以将 DataAdapter 对象的 MissingSchemaAction 属性设置为MissingSchemaAction.AddWithKey,该属性会将主键元数据与默认信息一起加载。例如:
daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey; daAuthors.Fill(dsPubs,"Authors");
这些数据此时作为 DataSet 的 Tables 集合内独立的 DataTable 对象来提供。如果您在对FillSchema 和 Fill 的调用中指定了一个表名,则可以使用该名称访问您需要的特定表。
DataTable tblAuthors; tblAuthors = dsPubs.Tables["Authors"];
可以使用 For Each 循环依次通过一个 DataTable 的 Rows 集合内所有 DataRow 对象。这将使您能够访问表的每一行。可以按名称或按位置索引("0"是第一个列位置)访问列。例如:
foreach (DataRow drCurrent in tblAuthors.Rows) { Console.WriteLine("{0} {1}", drCurrent["au_fname"].ToString(), drCurrent["au_lname"].ToString()); } Console.ReadLine(); 查询数据用 select * from 表名 where name=‘“+ 变量+”’”, 数据取出来一般封装在dataset的一个实例对象中,比如ds。 用 string value=ds.Tables[0].Row[0]["value"].ToString(); 就可以了
相关文章推荐
- SQL优化
- 浏览器,数据库的编码问题
- redis中的事务
- mcrypt pdo_mysql 等同类安装
- redis hash结构及命令详解
- mssql 表 登陆名 修改
- C#连接SQL SERVER数据库的详细步骤!
- mysql 优化笔记 未完
- JDBC学习笔记(三):连接Oracle数据库(连接池)
- mysql存储过程 定时任务
- Redis for Windows
- 数据库结构优化
- mysql数据库命令
- 利用tomcat redis 实现session共享
- postgresql 常用命令
- Oracel 数据库函数
- PDO数据库访问抽象层
- db2常用的时间操作(数据库查询)
- mysql数据库中date datetime timestamp time的区别
- mybatis一次执行多条sql语句