繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> 比较XML数据存取APIs(ZT)

比较XML数据存取APIs(ZT)

2007-07-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:选择正确的API从SQL Server获取XML数据。 by Greg Ewing and Jon Rauschenberger 技术工具箱: C#, SQL Server 2000, ASP.NET, XML, VB6 .NET Framework包含几个新的数据存取APIs,每种API对访问SQL Server中XML数...
关键字:存取 数据 APIs XML ZT

选择正确的API从SQL Server获取XML数据。

by Greg Ewing and Jon Rauschenberger

技术工具箱: C#, SQL Server 2000, ASP.NET, XML, VB6

.NET Framework包含几个新的数据存取APIs,每种API对访问SQL Server中XML数据的支持程度都不同。在如何完成你的解决方案、需要写多少代码方面,选择不同的API将会有不同的结果。在本专栏中,我将阐述Microsoft的四种XML数据存取APIs:ActiveX Data Objects (ADO) 2.6、ADO.NET、SqlDataReader和 SQLXML。

我们将重点讲述实现每种API需要的代码,并比较每种API提供的性能和可扩展性。通过一步步构建查询一个Northwind数据库所需要的代码,将结果转化成XML,我们来逐个说明这些API。然后通过对它们进行一些负载测试,我们来看看它们的性能如何。

要确定哪种XML数据存取API能够最好地满足你的需求,你需要考虑几个因素。首先,看一下每种API需要的代码量。然后,考虑你有多大的灵活性来控制API返回的XML格式。有时候,你不能控制XML的格式。最后,考虑API是如何执行和扩展的。因为SQL Server没有将本地数据存为XML,所以将数据从本地的SQL Server二进位格式转换成XML所需要的费用可能很高,可能会限制你的应用程序的性能和可扩展性

ADO是一个受欢迎的数据存取API。Microsoft最初在ADO 2.1中增加了将结果集转换成XML的支持功能,这就使你可以将一个结果集存为一个XML文件。相对于ADO 2.6对XML有限的支持,ADO.NET增加了许多新的XML功能。ADO.NET DataSet对象支持将结果集串行化成格式规范的XML。

让我们开始做个样例程序吧,打开VS.NET,创建一个新的C#类库。将Class1.cs重新命名为DBXML.cs,并取消名字空间。然后,添加引用System.Data.dll,它包含ADO.NET名字空间。接着,打开ADONet类并引入这些名字空间:using System.Data;

using System.Data.SqlClient;

现在,给DBXML 类添加代码,连接到数据库并用ADO.NET来执行SELECT语句(见列表1)。

列表1:

C# 用ADO.NET执行一个SQL SELECT语句

运用SqlDataAdapter可以很容易地通过构造器访问SQL SELECT命令,而且可以通过Selectcommand的Parameters集合访问任何必要的参数。通过运用InsertCommand和UpdateCommand属性,连同它们相关的Parameters集合,你就可以插入或更新数据。

public string ExecuteSelect

(string CustomerID,

string ConnectionString)

{

SqlConnection myConnection = new

SqlConnection(ConnectionString);

SqlDataAdapter mySqlDataAdapter1 = new

SqlDataAdapter("SELECT * FROM customers " +

"WHERE CustomerID = @CustomerID",

myConnection);

mySqlDataAdapter1.SelectCommand.

Parameters.Add("@CustomerID",

SqlDbType.Char, 5, "CustomerID");

mySqlDataAdapter1.SelectCommand.

Parameters["@CustomerID"].Value =

CustomerID;

DataSet myDataSet = new DataSet();

mySqlDataAdapter1.Fill

(myDataSet,"Customers");

return myDataSet.GetXML();

}

ExecuteSelect函数做的第一件事就是通过传递连接字符串到构造器用SqlConnection类来初试化一个到数据库的连接。然后,创建 SqlDataAdapter,将SELECT语句和连接对象传递到构造器中。SELECT语句有一个参数用于你选择的用户的ID,所以你必须将那个参数添加到SelectCommand Parameters集合中。Add函数可以接受参数的名字、数据类型、大小和列的关连。一旦这个参数是集合的一部分,你需要给它赋以正确的值。

下面的两步,创建DataSet并用适配器填充它,完成了大部分工作。如果连接没有打开,用DataAdapter上的Fill方法来打开连接,或者用已打开的连接,它通常返回到最初的状态。然后,你用GetXML函数将DataSet转换成XML字符串,返回给调用者。

运用SqlDataReader

SqlDataReader为数据存取提供了一个连续的、只读的指针,使其成为从SQL Server读取数据的最快的方式。DataReader对XML没有提供本地的支持,所以你必须自己写XML转换代码或运行一个返回XML的查询过程。对于这个例子,你可以用FOR XML RAW子句让SQL Server返回XML的数据。

运用SqlDataReader,写代码来执行SELECT语句并返回XML的结果(见列表2)。

列表2:

C# 获取XML数据

列表2.

以下代码说明了如何运用SqlCommand对象和StringBuilder类来获取XML数据。运用StringBuilder是因为它连接字符串的速度很快、效率很高。

public string ExecuteSqlDataReaderSelect(

string CustomerID,

string ConnectionString)

{

SqlConnection mySqlConnection = new

SqlConnection(ConnectionString);

SqlCommand mySqlCommand = new

SqlCommand("SELECT * FROM " +

"Customers WHERE CustomerID = " +

"@CustomerID FOR XML RAW",

mySqlConnection);

mySqlCommand.CommandType =

CommandType.Text;

mySqlCommand.Parameters

.Add("@CustomerID", SqlDbType.Char,

5, "CustomerID");

mySqlCommand.Parameters

["@CustomerID"].Value = CustomerID;

mySqlConnection.Open();

SqlDataReader myDR =

mySqlCommand.ExecuteReader(

CommandBehavior.CloseConnection);

StringBuilder XML = new

StringBuilder(8192);

while (myDR.Read())

{

if (!myDR.IsDBNull(0))

XML.Append(myDR.GetString(0));

}

return XML.ToString();

}

该方法中的第一行代码同ExecuteSelect函数一样。同DataSets一样,SqlDataReader依赖于一个SqlConnection对象。通过将SQL语句和Connection对象传递到构造器来创建Command对象。

在打开数据库连接后,通过给SqlDataReader赋以Command.ExecuteReader方法的返回值来创建SqlDataReader。然后,用StringBuilder类从SqlDataReader读取XML。在处理大的字符串方面,StringBuilder类比String类的字符串处理方法更有效。

调用 GetString(0)来得到与当前行的数据相关的字符串。结果集在一个很长的XML字符串中,所以你只需要反复调用read(),直到DataReader为空。一旦你创建了字符串,只需要把它返回给调用者就行了。

运用VS.NET得到XML数据的最后一个方法就是通过运用SQLXML托管类,它们是SQLXML 3.0功能包的一部分(见资源)。SQLXML功能包扩展了SQL Server 2000的XML功能。3.0版本中的托管类是.NET Framework的本地类,它们可以使用新增加的XML功能。

责任编辑:admin
相关文章