大佬教程收集整理的这篇文章主要介绍了使用C#将XML导入SQL,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
跨实现不始终支持多个cdaTA元素。例如,您将无法通过Xdocument或通过SelectNodes访问它们。如果您可以更改输入格式,那将使事情变得更容易。
该代码未经测试,没有错误处理或错误的数据检查,但它应该使您入门。使用XPathdocument / XPathNavigator进行性能研究,并阅读我的嵌入式注释。
class XmlCsvimport
{
public voID importData(string xmlData, ConnectionStringSettings connectionSettings)
{
DbProvIDerFactory provIDerFactory = DbProvIDerFactorIEs.GetFactory(connectionSettings.ProvIDername);
IDbConnection connection = provIDerFactory.CreateConnection();
connection.ConnectionString = connectionSettings.ConnectionString;
// Todo: Begin transaction
Xmldocument doc = new Xmldocument();
doc.LoadXml(xmlData);
foreach (XmlNode tableNode in doc.SelectNodes("/transaction/table"))
{
IDbCommand command = CreatCommand(connection, tableNode);
foreach (XmlNode rowNode in tableNode.SelectNodes("data/row"))
{
string[] values = GetRowValues(rowNode);
if (values.Length != command.Parameters.Count)
{
// Todo: Log bad row
continue;
}
this.FillCommand(command, values);
command.ExecuteNonquery();
}
}
// Todo: Commit transaction
}
private IDbCommand CreatCommand(IDbConnection connection, XmlNode tableNode)
{
string tablename = tableNode.Attributes["name"].Value;
IDbCommand command = connection.CreateCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
XmlNodeList fIEldNodes = tableNode.SelectNodes("fIElds/fIEld");
List<string> fIEldnameList = new List<string>(fIEldNodes.Count);
foreach (XmlNode fIEldNode in tableNode.SelectNodes("fIElds/fIEld"))
{
string fIEldname = fIEldNode.Attributes["name"].Value;
int fIEldType = Int32.Parse(fIEldNode.Attributes["type"].Value);
int fIEldSize = Int32.Parse(fIEldNode.Attributes["size"].Value);
IDbDataParameter param = command.CreateParameter();
param.Parametername = String.Concat("@", fIEldNode.Attributes["name"]);
param.Size = fIEldSize;
param.DbType = (DbType)fIEldType; // NOTE: this may not be so easy
command.Parameters.Add(param);
fIEldnameList.Add(fIEldname);
}
string[] fIEldnames = fIEldnameList.ToArray();
StringBuilder commandBuilder = new StringBuilder();
commandBuilder.AppendFormat("INSERT INTO [{0}] (", tablename);
string columnnames = String.Join("], [", fIEldnames);
string paramnames = String.Join(", @", fIEldnames);
command.CommandText = String.Concat(
"INSERT INTO [", tablename, "] ([",
columnnames,
"]) VALUES (@",
paramnames,
")"
);
return command;
}
private string[] GetRowValues(XmlNode row)
{
List<string> values = new List<string>();
foreach (XmlNode child in row.ChildNodes)
{
if (child.NodeType == XmlNodeType.Text ||
child.NodeType == XmlNodeType.cdaTA)
{
values.Add(child.Value);
}
}
return values.ToArray();
}
private voID FillCommand(IDbCommand command, string[] values)
{
for (int i = 0; i < values.Length; i++)
{
IDbDataParameter param = (IDbDataParameter)command.Parameters[i];
param.Value = values[i]; // Todo: Convert to correct data type
}
}
我知道寻求这种帮助并不是一件容易的事,但是我已经坚持了一段时间-现在我正在阅读两本C#书,每天工作超过9个小时。
好的,这是我的问题:我有一个几乎完整的WinForms C#应用程序。在SQL中,我有三个看起来像这样的表:
CREATE TABLE [dbo].[Racuni](
[BROJ] [varchar](12) NULL,[DATUM] [datetime] NULL,[TS] [datetime] NULL,[USER_ID] [int] NULL,[KASA_ID] [varchar](3) NULL,[TOTAL] [float] NULL,[STATUS] [varchar](1) NULL,[ARH] [varchar](max) NULL
) ON [PRIMARY]
Create Table "Rac_Npl"
( br_rac Char( 12 ),kasa_id Char( 3 ),npl_id Integer,iznos Money);
CREATE TABLE [dbo].[Stavke](
[br_rac] [varchar](12) NULL,[kasa_id] [char](3) NULL,[art_id] [int] NULL,[kol] [float] NULL,[mpc] [money] NULL,[ompc] [money] NULL)
我在本地磁盘上有XML文件,用于导入这三个表-XML看起来像这样:
<?xml version="1.0" encoding="windows-1250"?>
<transaction>
<table name="qryRacuniSmjene">
<fields>
<field name="BROJ" type="1" size="12"/>
<field name="DATUM" type="9" size="0"/>
<field name="TS" type="11" size="0"/>
<field name="USER_ID" type="3" size="0"/>
<field name="KASA_ID" type="1" size="3"/>
<field name="TOTAL" type="8" size="4"/>
<field name="STATUS" type="1" size="1"/>
<field name="ARH" type="16" size="1"/>
</fields>
<data>
<row>
<![CDATA[09-0002-0001]]>
<![CDATA[16.04.2009]]>
<![CDATA[16.04.2009 13:23:27]]>
<![CDATA[1]]>
<![CDATA[001]]>
<![CDATA[2,60]]>
<![CDATA[D]]>
<![CDATA[
porezni broj: 000000000000
Zaobilaznica bb
]]>
</row>
<row>
<![CDATA[09-0002-0002]]>
<![CDATA[16.04.2009]]>
<![CDATA[16.04.2009 13:23:27]]>
<![CDATA[1]]>
<![CDATA[001]]>
<![CDATA[2,60]]>
<![CDATA[D]]>
<![CDATA[
porezni broj: 000000000001
Zaobilaznica bb
]]>
</row>
</data>
</table>
<table name="qryRac_nplSmjene">
<fields>
<field name="br_rac" type="1" size="12"/>
<field name="kasa_id" type="1" size="3"/>
<field name="npl_id" type="3" size="0"/>
<field name="iznos" type="8" size="4"/>
</fields>
<data>
<row>
<![CDATA[09-0002-0001]]>
<![CDATA[001]]>
<![CDATA[1]]>
<![CDATA[2,60]]>
</row>
<row>
<![CDATA[09-0002-0002]]>
<![CDATA[001]]>
<![CDATA[1]]>
<![CDATA[2,60]]>
</row>
</data>
</table>
<table name="qryStavkeSmjene">
<fields>
<field name="br_rac" type="1" size="12"/>
<field name="kasa_id" type="1" size="3"/>
<field name="art_id" type="3" size="0"/>
<field name="kol" type="6" size="0"/>
<field name="mpc" type="8" size="4"/>
<field name="ompc" type="8" size="4"/>
</fields>
<data>
<row>
<![CDATA[09-0002-0001]]>
<![CDATA[001]]>
<![CDATA[152414]]>
<![CDATA[1,000]]>
<![CDATA[2,60]]>
<![CDATA[2,60]]>
</row>
<row>
<![CDATA[09-0002-0001]]>
<![CDATA[001]]>
<![CDATA[152414]]>
<![CDATA[1,60]]>
</row>
</data>
</table>
</transaction>
再一次让我感到尴尬,以这种方式请求帮助,但是我将尽一切可能尝试支持StackOverflow。
以上是大佬教程为你收集整理的使用C#将XML导入SQL全部内容,希望文章能够帮你解决使用C#将XML导入SQL所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。