目的:vb调用C#的web service的GetDS方法(返回DataSet类型,xml形式),读取数据后保存至本地数据库;
//web service method[WebMethod]
public DataSet GetDS()
{
System.Data.DataSet dsGCGL=new DataSet();
dbDAP1=new System.Data.Odbc.OdbcDataAdapter("select * from jtxm order by gc_id asc",dbConn);
dbDAP1.Fill(dsGCGL,"JTXM");
return dsGCGL;
}//生成的xml
<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://tempuri.org/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
- <xs:complexType>
- <xs:choice maxOccurs="unbounded">
- <xs:element name="JTXM">
- <xs:complexType>
- <xs:sequence>
<xs:element name="GC_ID" type="xs:int" minOccurs="0" />
<xs:element name="GCLB" type="xs:string" minOccurs="0" />
<xs:element name="GCXZ" type="xs:string" minOccurs="0" />
<xs:element name="GCMC" type="xs:string" minOccurs="0" />
<xs:element name="GSJE" type="xs:double" minOccurs="0" />
<xs:element name="JSNR" type="xs:string" minOccurs="0" />
<xs:element name="REMARK" type="xs:string" minOccurs="0" />
<xs:element name="GCLX" type="xs:dateTime" minOccurs="0" />
<xs:element name="JDZT" type="xs:string" minOccurs="0" />
<xs:element name="XMJL" type="xs:string" minOccurs="0" />
<xs:element name="CKRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="IS_TD" type="xs:string" minOccurs="0" />
<xs:element name="TDFW" type="xs:string" minOccurs="0" />
<xs:element name="GWRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="GWBH" type="xs:string" minOccurs="0" />
<xs:element name="GCNR" type="xs:string" minOccurs="0" />
<xs:element name="YQYS" type="xs:int" minOccurs="0" />
<xs:element name="SGSJ" type="xs:int" minOccurs="0" />
<xs:element name="TZQK" type="xs:string" minOccurs="0" />
<xs:element name="QTQK" type="xs:string" minOccurs="0" />
<xs:element name="MEMO" type="xs:string" minOccurs="0" />
<xs:element name="GSRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="GSR" type="xs:string" minOccurs="0" />
<xs:element name="SGDW" type="xs:string" minOccurs="0" />
<xs:element name="GSYJ" type="xs:string" minOccurs="0" />
<xs:element name="GSBG" type="xs:dateTime" minOccurs="0" />
<xs:element name="GSYY" type="xs:string" minOccurs="0" />
<xs:element name="GSRQ_E" type="xs:dateTime" minOccurs="0" />
<xs:element name="QCRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="QSBM" type="xs:string" minOccurs="0" />
<xs:element name="ZJRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="ZJYY" type="xs:string" minOccurs="0" />
<xs:element name="GCBBH" type="xs:string" minOccurs="0" />
<xs:element name="EPLANID" type="xs:int" minOccurs="0" />
<xs:element name="TREASON" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <JTXM diffgr:id="JTXM1" msdata:rowOrder="0">
<GC_ID>1050001</GC_ID>
<GCLB>局投工程</GCLB>
<GCXZ>计配工程</GCXZ>
<GCMC>135银泰线切割工程(2005-005)</GCMC>
<REMARK>要求竣工日期2005年5月底</REMARK>
<GCLX>2005-01-07T00:00:00.0000000+08:00</GCLX>
<JDZT>项目查勘</JDZT>
<XMJL>叶涛</XMJL>
<CKRQ>2005-03-07T00:00:00.0000000+08:00</CKRQ>
</JTXM>
</NewDataSet>
</diffgr:diffgram>
</DataSet>//vb调用
引用Microsoft Soap Type Library 3.0, MS xml 2.0
Private Sub GetworkFromService()
Dim SoapClient As New SoapClient30
Dim xmlRD As New SoapReader30
Dim Getted As Boolean
On Error GoTo ERR
Call SoapClient.MSSoapInit(WSDL_URL, "", "")
//WSDL_URL:http://localhost/gcgl/gcglSVC.asmx?WSDL
Dim xmlDoc As New DOMDocument
Dim xmlList As IXMLDOMNodeList
Dim xmlNode As IXMLDOMNode
Dim xmlElem As IXMLDOMElement
Set xmlList = SoapClient.GetDS()
//以下方法可以成功
MsgBox Trim(xmlList.Item(1).childNodes(0).childNodes(0).childNodes(1).nodeTypedValue) 'xmlDoc.loadxml WSDL_URL //这种方法错误ERR:
If ERR.Number <> 0 Then
MsgBox "从业扩系统导入数据失败:" & ERR.Description, vbCritical + vbOKOnly, "警告"
Exit Sub
End If
End Sub需解决的问题:
是否非得按以上的方法每个节点读出来后,再存入数据库,有没有其他好的方法?
//web service method[WebMethod]
public DataSet GetDS()
{
System.Data.DataSet dsGCGL=new DataSet();
dbDAP1=new System.Data.Odbc.OdbcDataAdapter("select * from jtxm order by gc_id asc",dbConn);
dbDAP1.Fill(dsGCGL,"JTXM");
return dsGCGL;
}//生成的xml
<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://tempuri.org/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
- <xs:complexType>
- <xs:choice maxOccurs="unbounded">
- <xs:element name="JTXM">
- <xs:complexType>
- <xs:sequence>
<xs:element name="GC_ID" type="xs:int" minOccurs="0" />
<xs:element name="GCLB" type="xs:string" minOccurs="0" />
<xs:element name="GCXZ" type="xs:string" minOccurs="0" />
<xs:element name="GCMC" type="xs:string" minOccurs="0" />
<xs:element name="GSJE" type="xs:double" minOccurs="0" />
<xs:element name="JSNR" type="xs:string" minOccurs="0" />
<xs:element name="REMARK" type="xs:string" minOccurs="0" />
<xs:element name="GCLX" type="xs:dateTime" minOccurs="0" />
<xs:element name="JDZT" type="xs:string" minOccurs="0" />
<xs:element name="XMJL" type="xs:string" minOccurs="0" />
<xs:element name="CKRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="IS_TD" type="xs:string" minOccurs="0" />
<xs:element name="TDFW" type="xs:string" minOccurs="0" />
<xs:element name="GWRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="GWBH" type="xs:string" minOccurs="0" />
<xs:element name="GCNR" type="xs:string" minOccurs="0" />
<xs:element name="YQYS" type="xs:int" minOccurs="0" />
<xs:element name="SGSJ" type="xs:int" minOccurs="0" />
<xs:element name="TZQK" type="xs:string" minOccurs="0" />
<xs:element name="QTQK" type="xs:string" minOccurs="0" />
<xs:element name="MEMO" type="xs:string" minOccurs="0" />
<xs:element name="GSRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="GSR" type="xs:string" minOccurs="0" />
<xs:element name="SGDW" type="xs:string" minOccurs="0" />
<xs:element name="GSYJ" type="xs:string" minOccurs="0" />
<xs:element name="GSBG" type="xs:dateTime" minOccurs="0" />
<xs:element name="GSYY" type="xs:string" minOccurs="0" />
<xs:element name="GSRQ_E" type="xs:dateTime" minOccurs="0" />
<xs:element name="QCRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="QSBM" type="xs:string" minOccurs="0" />
<xs:element name="ZJRQ" type="xs:dateTime" minOccurs="0" />
<xs:element name="ZJYY" type="xs:string" minOccurs="0" />
<xs:element name="GCBBH" type="xs:string" minOccurs="0" />
<xs:element name="EPLANID" type="xs:int" minOccurs="0" />
<xs:element name="TREASON" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <JTXM diffgr:id="JTXM1" msdata:rowOrder="0">
<GC_ID>1050001</GC_ID>
<GCLB>局投工程</GCLB>
<GCXZ>计配工程</GCXZ>
<GCMC>135银泰线切割工程(2005-005)</GCMC>
<REMARK>要求竣工日期2005年5月底</REMARK>
<GCLX>2005-01-07T00:00:00.0000000+08:00</GCLX>
<JDZT>项目查勘</JDZT>
<XMJL>叶涛</XMJL>
<CKRQ>2005-03-07T00:00:00.0000000+08:00</CKRQ>
</JTXM>
</NewDataSet>
</diffgr:diffgram>
</DataSet>//vb调用
引用Microsoft Soap Type Library 3.0, MS xml 2.0
Private Sub GetworkFromService()
Dim SoapClient As New SoapClient30
Dim xmlRD As New SoapReader30
Dim Getted As Boolean
On Error GoTo ERR
Call SoapClient.MSSoapInit(WSDL_URL, "", "")
//WSDL_URL:http://localhost/gcgl/gcglSVC.asmx?WSDL
Dim xmlDoc As New DOMDocument
Dim xmlList As IXMLDOMNodeList
Dim xmlNode As IXMLDOMNode
Dim xmlElem As IXMLDOMElement
Set xmlList = SoapClient.GetDS()
//以下方法可以成功
MsgBox Trim(xmlList.Item(1).childNodes(0).childNodes(0).childNodes(1).nodeTypedValue) 'xmlDoc.loadxml WSDL_URL //这种方法错误ERR:
If ERR.Number <> 0 Then
MsgBox "从业扩系统导入数据失败:" & ERR.Description, vbCritical + vbOKOnly, "警告"
Exit Sub
End If
End Sub需解决的问题:
是否非得按以上的方法每个节点读出来后,再存入数据库,有没有其他好的方法?
在VB端用XML直接生成recordset