您的位置:首页 > 其它

使用XML Web Service返回DataTable对象的问题

2004-05-06 00:20 555 查看
第一次翻译文档,如有问题敬请原谅并指教!

英文原文

This article was previously published under Q306134

问题

在Visual Studio .Net集成开发环境中试图添加到这个XML Web Service的引用时,也会看到下面类似的错误信息:

System.Data.DataRelation cannot be serialized because it does not have a default public constructor. 在Visual Studio .Net集成开发环境中试图添加到这个XML Web Service的引用时,也会看到下面类似的错误信息:

Internal Server Error. Unable to request "http://localhost/Webservice1/Service1.asmx?WSDL". The server responded with error code "ProtocolError".

原因

DataTable、 DataRow、 DataView以及 DataViewManager 等对象不能被序列化也不能被从一个XML XML Web service返回。要返回,至少必须是一个完整的 DataSet ,因此必须把要返回的数据复制到一个 DataSet中。

解决

解决这个问题的方法是:返回一个 DataSet 以替代 DataTable。一个 DataSet 对象中可以包含一个或多个 DataTable对象。

状态

本行为正在设计中。

更多信息

操作步骤

说明:以下示例包含VB.NET、C#和J#。

在一个已存在的XML Web Service中添加一个返回DataTable对象的Web Service方法。以下代码创建一个连接到Microsoft SQL Server数据库和Authors表。如果你想使用本代码,请修改并连接到你的安装有SQL Server的计算机上。
'Visual Basic
<WebMethod()> Function GiveMeADataTable() As System.Data.DataTable
Dim conn As New System.Data.SqlClient.SqlConnection("Server=YourServer;Initial Catalog=pubs;Integrated Security=SSPI;")
Dim ds As New System.Data.DataSet()
Dim adapter As New System.Data.SqlClient.SqlDataAdapter()
adapter.SelectCommand = New System.Data.SqlClient.SqlCommand("Select * From Authors", conn)
adapter.Fill(ds, "Authors")
Return ds.Tables("Authors")
End Function
//Visual C#
[WebMethod]
public System.Data.DataTable GiveMeADataTable()
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("Server=YourServer;Initial Catalog=pubs;Integrated Security=SSPI;");
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter();
adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("Select * From Authors", conn);
adapter.Fill(ds, "Authors");
return ds.Tables["Authors"];
}
/**Visual J# */
/** @attribute WebMethod() */
public System.Data.DataTable GiveMeADataTable()
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("Server=YourServer;Initial Catalog=pubs;Integrated Security=SSPI;");
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter();
adapter.set_SelectCommand(new System.Data.SqlClient.SqlCommand("Select * From Authors", conn));
adapter.Fill(ds, "Authors");
System.Data.DataTableCollection dtc = ds.get_Tables();
return dtc.get_Item("Authors");
}

编译这个XML Web service.。
浏览你添加了上面的方法的XML Web Service的URL,你将收到错误信息。
修改为如下的代码,使用 DataSet 对象替换 DataTable对象:
'Visual Basic
<WebMethod()> Function GiveMeADataSet() As System.Data.DataSet
Dim conn As New System.Data.SqlClient.SqlConnection("Server=YourServer;Initial Catalog=pubs;Integrated Security=SSPI;")
Dim ds As New System.Data.DataSet()
Dim adapter As New System.Data.SqlClient.SqlDataAdapter()
adapter.SelectCommand = New System.Data.SqlClient.SqlCommand("Select * From Authors", conn)
adapter.Fill(ds, "Authors")
Return ds
End Function
//Visual C#
[WebMethod]
public System.Data.DataSet GiveMeADataSet()
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("Server=YourServer;Initial Catalog=pubs;Integrated Security=SSPI;");
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter();
adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("Select * From Authors", conn);
adapter.Fill(ds, "Authors");
return ds;
}
/**Visual J# */
/** @attribute WebMethod() */
public System.Data.DataSet GiveMeADataSet()
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("Server=YourServer;Initial Catalog=pubs;Integrated Security=SSPI;");
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter();
adapter.set_SelectCommand(new System.Data.SqlClient.SqlCommand("Select * From Authors", conn));
adapter.Fill(ds, "Authors");
return ds;
}

编译这个XML Web Service。
再浏览这个XML Web Service方法的URL连接,将不会看到上面的错误提示。

本文档信息应用于:

Microsoft Web Services (包括.NET Framework) 1.0
Microsoft Web Services (包括.NET Framework 1.1)
Microsoft Visual Basic .NET (2002)
Microsoft Visual C# .NET (2002)
Microsoft ASP.NET (包括.NET Framework) 1.0
Microsoft Visual J# .NET (2002)
Microsoft Visual J# .NET (2003)
Microsoft Visual C# .NET (2003)
Microsoft Visual Basic .NET (2003)
Microsoft ASP.NET (包括.NET Framework 1.1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: