程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用C#将XML导入SQL大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用C#将XML导入SQL?

开发过程中遇到使用C#将XML导入SQL的问题如何解决?下面主要结合日常开发的经验,给出你关于使用C#将XML导入SQL的解决方法建议,希望对你解决使用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,请注明来意。
标签: