Data Table是一个临时保存数据的网格虚拟表。它可以被应用在 VB 和 ASP 上,无须代码就可以简单的绑定数据库。通常情况下Web Service不能直接返回Data Table,在客户端会报无法序列化的错误。因此,掌握Web Service返回Data Table方法是关键所在。
Web Service返回Data Table的以下三种方案的实质应该都是序列化的:
解决方案一:返回dataset
Web Service中的方法代码如下:
[WebMethod]
public DataSet GetDataSet()
{
DataTable dt=new DataTable("mytable");
DataColumn dc=new DataColumn("id",typeof(string));
dt.Columns.Add(dc);
DataRow dr=dt.NewRow();
dr["id"]="1111111";
dt.Rows.Add(dr);
DataSet ds=new DataSet();
ds.Tables.Add(dt);
return ds;
}
在调用客户端直接使用DataSet
DataSet ds = db.GetDataSet();//db是服务代理类实例
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
解决方案二:给返回的datatable命名
webservice文件中
[WebMethod]
public DataTable dt()
{
DataTable dt = new DataTable("default");
dt.Columns.Add("id");
dt.Columns.Add("name");
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["id"] = i.ToString();
dr["name"] = "name" + i.ToString();
dt.Rows.Add(dr);
}
return dt;
}
调用页面中
WebService1.WebService1 service = new WebService1.WebService1();
DataTable dt = service.dt();
gvUser.DataSource = dt;
gvUser.DataBind();
最关键的是在Web Service的方法中为data table命名,否则就会报错。
解决方案三:服务中将Data Table的序列化成xml字符串,调用时候在反序列化成Data Table
#region DataTable序列化和反序列化
///
/// DataTableToXML ///
public static string ConvertDataTableToXML(DataTable dt)
{
return ConvertDataTableToXML(dt, string.Empty);
}
public static string ConvertDataTableToXML(DataTable dt, string aaa)
{
StringWriter sw = null;
try
{
if (dt.TableName == string.Empty)
dt.TableName = "table1";
sw = new StringWriter();
dt.WriteXml(sw, XmlWriteMode.WriteSchema);
return sw.ToString();
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
if (sw != null)
sw.Close();
}
}
///
/// XMLToDataTable ///
public static DataTable ConvertXMLToDataTable(string xmlData)
{
TextReader sr = null;
try
{
DataTable dt = new DataTable();
sr = new StringReader(xmlData);
dt.ReadXml(sr);
return dt;
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
if (sr != null) sr.Close();
}
}
#endregion
以上就是Web Service返回Data Table的三种方法,其中最常用的还是返回dataset,相对来说,更加简单一些。我们在实际的开发过程中也应该学会举一反三,从多个角度多方案的解决问题,实现对自己的能力进阶!
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习