使用XML Web Service返回DataTable对象的问题
2004-05-06 00:20
555 查看
第一次翻译文档,如有问题敬请原谅并指教!
英文原文
This article was previously published under Q306134
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".
在一个已存在的XML Web Service中添加一个返回DataTable对象的Web Service方法。以下代码创建一个连接到Microsoft SQL Server数据库和Authors表。如果你想使用本代码,请修改并连接到你的安装有SQL Server的计算机上。
编译这个XML Web service.。
浏览你添加了上面的方法的XML Web Service的URL,你将收到错误信息。
修改为如下的代码,使用 DataSet 对象替换 DataTable对象:
编译这个XML Web Service。
再浏览这个XML Web Service方法的URL连接,将不会看到上面的错误提示。
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)
英文原文
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.0Microsoft 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)
相关文章推荐
- 使用返回 DataTable 的 XML Web 服务时出现问题
- 使用BizTalk解析Web service返回的XMLDocument消息
- 后台对象,使用google json组件用json格式返回给前端的问题
- 疑问: Web Service 的返回数值 string的形式返回xml,怎样把数据导入到DataSet中使用?
- Andriod ADT v22.6.2版本中在Mainactivity.java中使用fragment_main.xml中TextView控件对象的问题
- spring mvc 使用XStream返回xml下划线问题
- 关于mybatis 使用case when 计算BigDecimal 数据返回对象的问题
- 使用BizTalk解析Web service返回的XMLDocument消息
- 使用XMLHttpRequest对象时遇到的问题
- 使用JavaScriptConverter实现返回DataTable对象
- SpringMVC使用JSON返回对象遇到的问题。
- 使用XStream进行XML与对象的互相转换 下划线问题
- 使用mybits的mapper.xml而非注解生成的mapper对象的问题
- 动态调用Web Service及C#反射返回类或List对象问题解决
- [Jersey]使用jersey实现RESTful web service 之 web.xml配置问题
- Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查
- 使用BizTalk解析Web service返回的XMLDocument消息
- 动态调用Web Service及C#反射返回类或List对象问题解决
- AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题
- 使用xmlHttpRequest对象完成异步交互时,遇到的问题