您的位置:首页 > 理论基础 > 计算机网络

使用 Visual C# .NET 从数据库填充 DataSet 对象http://support.microsoft.com/kb/314145/

2008-10-06 13:24 555 查看

填充 DataSet

loadTOCNode(2, 'summary');
System.Data 名称空间使用多种对象,您可以连接到一个数据库服务器,运行查询,然后把结果放到 DataSet 对象中。DataSet 是断开连接的对象。因此,加载数据后,在您想加载更多数据或想使用您对这些信息的内存中副本所作的更改更新服务器之前,不会再使用与数据库的连接。

若要将数据从数据库加载到 DataSet 中,请按照下列步骤操作:
1.启动 Visual Studio .NET。
2.在 Visual C# .NET 中新建一个"控制台应用程序"项目。Visual Studio .NET 为您创建一个静态类和一个空的 Main 过程。
3.确保项目引用 SystemSystem.Data 这两个名称空间。
4. SystemSystem.DataSystem.Data.SqlClient 名称空间使用 using 语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。必须在任何其他声明之前使用这些语句。
using System;
using System.Data;
using System.Data.SqlClient;
5.从数据库向 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();
6.创建一个 DataAdapter 对象,它表示数据库和 DataSet 对象之间的链接。您可以将 SQL 或另一类型的用于检索数据的命令指定为 DataAdapter 的构造函数对象的一部分。下面的示例使用了一个 SQL 语句从 Pubs 数据库的 Authors 表检索记录。
SqlDataAdapter daAuthors
= new SqlDataAdapter("Select * From Authors", objConn);
7.必须声明并创建 DataSet 对象的一个实例,此时您应为整个 DataSet 提供一个名称,然后才能开始加载任何数据。该名称可包含若干独立的表。
DataSet dsPubs = new DataSet("Pubs");
8.SqlDataAdapter 类提供 FillFillSchema 两种方法,这对于加载这些数据很关键。这两种方法均可将信息加载到 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");
9.这些数据此时作为 DataSetTables 集合内独立的 DataTable 对象来提供。如果您在对 FillSchemaFill 的调用中指定了一个表名,则可以使用该名称访问您需要的特定表。
DataTable tblAuthors;
tblAuthors = dsPubs.Tables["Authors"];
10.可以使用 For Each 循环依次通过一个 DataTableRows 集合内所有 DataRow 对象。这将使您能够访问表的每一行。可以按名称或按位置索引("0"是第一个列位置)访问列。例如:
foreach (DataRow drCurrent in tblAuthors.Rows)
{
Console.WriteLine("{0} {1}",
drCurrent["au_fname"].ToString(),
drCurrent["au_lname"].ToString());
}
Console.ReadLine();
11.保存项目。在调试菜单上,单击开始以运行您的项目,并确保它能正常运行。


回到顶端

完整代码列表

loadTOCNode(2, 'summary');
using System;
using System.Data;
using System.Data.SqlClient;

namespace PopulateDataSet
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
string sConnectionString; sConnectionString = "Password=myPassword;User ID=myUserID;" + "Initial Catalog=pubs;" + "Data Source=(local)"; SqlConnection objConn = new SqlConnection(sConnectionString); objConn.Open();

SqlDataAdapter daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
DataSet dsPubs = new DataSet("Pubs");
daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors"); daAuthors.Fill(dsPubs,"Authors");

DataTable tblAuthors; tblAuthors = dsPubs.Tables["Authors"];

foreach (DataRow drCurrent in tblAuthors.Rows) { Console.WriteLine("{0} {1}", drCurrent["au_fname"].ToString(), drCurrent["au_lname"].ToString()); } Console.ReadLine();
}
}
}



回到顶端
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐