C# xml文件数据 写入数据库问题 本帖最后由 mb892535077 于 2013-03-07 09:52:59 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 XML数据可遍历读取,也可转DataTable 读取XML 创建表,插入数据。 符合xml格式规范,用下面这个/// 通过传入的xml文件路径(含文件名),将格式化的Xml文件自动读取转换为DataSet。public static DataSet GetDataSetByXmlpath(string strXmlPath){ try { DataSet ds = new DataSet(); //读取XML到DataSet StreamReader sr = new StreamReader(strXmlPath, Encoding.Default); ds.ReadXml(sr); sr.Close(); if (ds.Tables.Count > 0) return ds; return null; } catch (Exception) { return null; }}不符合规范,只有解析读取 谢谢大家的回复 比如xml文件如下:<?xml version="1.0" encoding="utf-8"?><TestDataSet xmlns="http://tempuri.org/TestDataSet.xsd"> <xs:schema id="TestDataSet" targetNamespace="http://tempuri.org/TestDataSet.xsd" xmlns:mstns="http://tempuri.org/TestDataSet.xsd" xmlns="http://tempuri.org/TestDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:element name="TestDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="REJIMDSOU" msprop:BaseTable.0="REJIMDSOU"> <xs:complexType> <xs:sequence> <xs:element name="UKENO" msprop:OraDbType="126" msprop:BaseColumn="UKENO" type="xs:string" minOccurs="0" /> <xs:element name="HOKEN" msprop:OraDbType="126" msprop:BaseColumn="HOKEN" type="xs:string" minOccurs="0" /> <xs:element name="TEST" msprop:OraDbType="104" msprop:BaseColumn="TEST" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <REJIMDSOU> <UKENO>00420019</UKENO> <HOKEN>00420019</HOKEN> <TEST>11 </TEST> </REJIMDSOU> <REJIMDSOU> <UKENO>test</UKENO> <HOKEN>test</HOKEN> <TEST>11 </TEST> </REJIMDSOU></TestDataSet>将其读入dataset后 怎么写入数据库呢?我如果从节点读在通过SqlDataAdapter.update 写入 我写过代码是SqlConnection conn = new SqlConnection(数据库连接); SqlDataAdapter da = new SqlDataAdapter("select * from REJIMDSOU", conn); SqlCommandBuilder cmdb = new SqlCommandBuilder(da); conn.Open(); DataSet ds = new DataSet(); da.Fill(ds); ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns[0] }; da.InsertCommand = cmdb.GetInsertCommand(); //da.UpdateCommand = cmdb.GetUpdateCommand(); //da.DeleteCommand = cmdb.GetDeleteCommand(); ds.ReadXml(xmlfile); da.Update(ds);这样向数据库中存不进去,这样代码是否有问题。。请各位大侠指教 请问存入dataset后怎么存入数据库? 因为节点是不确定的,我不知道怎么遍历 @xml文件本来可以作为参数传递到数据库的.在数据库中遍历操作就可以了. CREATE PROCEDURE [dbo].[P_Test]( @xml xml =null )ASBEGIN--批量更新 update tableA set stat=u.c.value('testID[1]','int') from @xml.nodes('(/root/Test)') u(c) where tableA .ID=u.c.value('ID[1]','int')END 使用@xml和表一样,MS你上面的@xml文件很不规则,具体在实际业务中看是否可以应用. 谢谢各位了,问题解决了我是直接通过遍历dataset 再通过DataAdapter.Update(dataset)的方式做的先前钻进死胡同了 请问如何实现以下功能-listview C# 怎么实现USB传输啊 网页图片显示红叉,用记事本打开,保存一下就能显示了,什么都没有改动,请问是怎么回事? 关于正则表达式 简单问题:请问如何得到网络上文件的大小 pdf 控件 出售 B/S中,多个用户对服务器里的同一个XML进行写操作,不会有什么问题吧? entityFramework 如何完成登录功能 C#中如何使得form1和form3传递事件问题 诚聘,.net(c#)开发人员,待遇优,专职,北京工作,男女不限 跨线程给combobox设置选定项报错 JSON的字符串有什么好办法转换成list?
public static DataSet GetDataSetByXmlpath(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
//读取XML到DataSet StreamReader sr = new StreamReader(strXmlPath, Encoding.Default); ds.ReadXml(sr); sr.Close(); if (ds.Tables.Count > 0)
return ds;
return null;
}
catch (Exception)
{
return null;
}
}
不符合规范,只有解析读取
<?xml version="1.0" encoding="utf-8"?>
<TestDataSet xmlns="http://tempuri.org/TestDataSet.xsd">
<xs:schema id="TestDataSet" targetNamespace="http://tempuri.org/TestDataSet.xsd" xmlns:mstns="http://tempuri.org/TestDataSet.xsd" xmlns="http://tempuri.org/TestDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="TestDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="REJIMDSOU" msprop:BaseTable.0="REJIMDSOU">
<xs:complexType>
<xs:sequence>
<xs:element name="UKENO" msprop:OraDbType="126" msprop:BaseColumn="UKENO" type="xs:string" minOccurs="0" />
<xs:element name="HOKEN" msprop:OraDbType="126" msprop:BaseColumn="HOKEN" type="xs:string" minOccurs="0" />
<xs:element name="TEST" msprop:OraDbType="104" msprop:BaseColumn="TEST" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<REJIMDSOU>
<UKENO>00420019</UKENO>
<HOKEN>00420019</HOKEN>
<TEST>11 </TEST>
</REJIMDSOU>
<REJIMDSOU>
<UKENO>test</UKENO>
<HOKEN>test</HOKEN>
<TEST>11 </TEST>
</REJIMDSOU>
</TestDataSet>将其读入dataset后 怎么写入数据库呢?
我如果从节点读在通过SqlDataAdapter.update 写入
我写过代码是
SqlConnection conn = new SqlConnection(数据库连接);
SqlDataAdapter da = new SqlDataAdapter("select * from REJIMDSOU", conn);
SqlCommandBuilder cmdb = new SqlCommandBuilder(da);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds);
ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns[0] };
da.InsertCommand = cmdb.GetInsertCommand();
//da.UpdateCommand = cmdb.GetUpdateCommand();
//da.DeleteCommand = cmdb.GetDeleteCommand();
ds.ReadXml(xmlfile);
da.Update(ds);
这样向数据库中存不进去,这样代码是否有问题。。请各位大侠指教
在数据库中遍历操作就可以了.
CREATE PROCEDURE [dbo].[P_Test]
(
@xml xml =null )
AS
BEGIN
--批量更新
update tableA set stat=u.c.value('testID[1]','int')
from @xml.nodes('(/root/Test)') u(c) where tableA .ID=u.c.value('ID[1]','int')
END 使用@xml和表一样,MS你上面的@xml文件很不规则,具体在实际业务中看是否可以应用.