求救Delpih调用C#开发的webService返回一个DataSet怎么处理
在C#里在数据库(SQLServer)中得到一个结果集并转换成一个XML字符返回到客户端,客户端怎么接受这个数据类型并显示到ClientDataSet中 --------------------编程问答-------------------- Delpih中的话.. 只能自己拆分XML数据了.. 不熟Delpih --------------------编程问答-------------------- 同样的问题在困惑着我.在跨语言时,各种参数的传递问题.目前,我仅能实现用Delphi传送string,integet等简单类型,更复杂一些的参数如果在delphi与.net之间传递?
与楼主共顶. --------------------编程问答-------------------- 不要返回DataSet,而是直接返回DataSet内容的XML,然后再解析这个XML.
--------------------编程问答--------------------
[WebMethod(Description="根据SQL语句获取数据",EnableSession=true)]
public string GetDataSet(string SQL,string TableName)
{
DataSet ds=new DataSet();
DataTable table=DAO.DBWR.Instance.GetData(SQL);
table.TableName="Result";
ds.Tables.Add(table);
System.IO.StringWriter sw=new System.IO.StringWriter();
ds.WriteXml(sw,XmlWriteMode.IgnoreSchema);
return sw.ToString();
} --------------------编程问答-------------------- 如果不是NET平台 返回就不是DS类型 而是一个 XML 了! 只所以NET平台是DS 那时CLR做了工作 --------------------编程问答-------------------- 偶已经成功接受,并显示在ClientDataSet中,
1.在webService中作楼上处理
*****************
[WebMethod(Description="根据SQL语句获取数据",EnableSession=true)]
public string GetDataSet(string SQL,string TableName)
{
DataSet ds=new DataSet();
DataTable table=DAO.DBWR.Instance.GetData(SQL);
table.TableName="Result";
ds.Tables.Add(table);
System.IO.StringWriter sw=new System.IO.StringWriter();
ds.WriteXml(sw,XmlWriteMode.IgnoreSchema);
return sw.ToString();
}
*****************
2.在delphi要作处理,
第一.得到xml,
第二.用delphi的XML Mapper打开xml,生成对应*.xtr文件
第三.delphi程式中添加XMLTransformProvider1,ClientDataSet的ProviderName属性设成XMLTransformProvider1
第四.XMLTransformProvider1的TransformRead属性的子属性TransformationFile指向第二步生成的*.xtr文件
第五.接收处理.
定义变量B:WideString;
省略代码****
B := 接收的XML字符串。
ClientDataset1.Active := FALSE;
XMLDoc := NewXMLDocument;//当然,XMLDoc 要在前边定义好
XMLDoc.Encoding := 'SUTF8';
XMLDoc.LoadFromXML(B);
//XMLDoc.SaveToFile('Test.xml');
XMLTransformProvider1.TransformRead.SourceXmlDocument := XMLDoc.GetDOMDocument;
ClientDataset1.Active := TRUE; //怎么连接到DBGrid就不用写了吧
搞定收工
--------------------编程问答-------------------- 第二.用delphi的XML Mapper打开xml,生成对应*.xtr文件
偶是现学的,楼主在网上找找,应该很多教程 --------------------编程问答-------------------- 没必要,换我就直接用C#做客户端拉倒。 --------------------编程问答--------------------
xml:=(Httprio1 as WebService1Soap).users;
ClientDataset1.Active:=false;
ClientDataset1.XMLData :=xml;
ClientDataset1.Active:=true;
public static string ToClientDataSet(DataSet ds, string TableName)
{
int FieldCount = ds.Tables[TableName].Columns.Count;
string result = "<?xml version=\"1.0\" standalone=\"yes\"?>";
result += "<DATAPACKET Version=\"2.0\">";
result += "<METADATA><FIELDS>";
for (int i = 0; i < FieldCount; i++) {
DataColumn dc = ds.Tables[TableName].Columns[i];
string FieldType = dc.DataType.Name.ToLower();
// integer
if (FieldType.ToLower() == "int32")
FieldType = "i4";
// int64
if (FieldType.ToLower() == "int64")
FieldType = "i8";
// float
if (FieldType.ToLower() == "single")
FieldType = "r8";
// memo
if (FieldType.ToLower() == "string" && dc.MaxLength > 255)
FieldType = "bin.hex";
// bytes
if (FieldType.ToLower() == "byte[]")
FieldType = "bin.hex";
result += string.Format("<FIELD attrname=\"{0}\" fieldtype=\"{1}\" ", dc.ColumnName, FieldType);
if (FieldType == "bin.hex" && dc.DataType.Name.ToLower() == "string")
result += "SUBTYPE=\"Text\" ";
else if (FieldType == "string")
result += string.Format("WIDTH=\"{0}\" ", dc.MaxLength);
else if (FieldType == "sqldatetime")
result += "SUBTYPE=\"Formatted\"";
else if (FieldType == "bin.hex" && dc.DataType.Name.ToLower() != "string" || dc.DataType.Name.ToLower() == "byte[]")
result += "SUBTYPE=\"Binary\"";
result += "/>";
}
result += "</FIELDS><PARAMS/></METADATA>";
result += "<ROWDATA>";
int RowCount = ds.Tables[TableName].Rows.Count;
for (int i = 0; i < RowCount; i++) {
result += "<ROW RowState=\"4\" ";
for (int j = 0; j < FieldCount; j++) {
DataTable dt = ds.Tables[TableName];
string value = dt.Rows[i].ItemArray[j].ToString();
value = value.Replace("\"", """);
result += string.Format("{0}=\"{1}\" ",
dt.Columns[j].ColumnName,
value);
}
result += "/>";
}
result += "</ROWDATA></DATAPACKET>";
return result;
}
--------------------编程问答-------------------- 通过XML,解析与反解析~~~
补充:.NET技术 , Web Services