【问题标题】:Load XML data without XSL into sql table using ssis script task使用 ssis 脚本任务将没有 XSL 的 XML 数据加载到 sql 表中
【发布时间】:2015-10-05 16:34:35
【问题描述】:

我有一个没有关联 xslt 的 xml 数据。它是我的客户提供的自动生成的 xml。下面是xml文档的示例。

HTTP/1.1 200 OK
Content-Length: 47033212
Content-Type: application/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 22 Sep 2015 23:02:56 GMT

<ExportPackageResult xmlns="http://schemas.data.org/2004/07/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ResponseDateTime>2015-09-22T19:02:44.2363931-04:00</ResponseDateTime>
<datapoints>
<PackageDataPoint>
  <ADDON>
    .....
  </ADDON>
  <FIELDSET>
    .....
  </FIELDSET>
</PackageDataPoint>

我的表的数据位于每个 PackageDataPoint../PackageDataPoint 中,每个内部都会有各种子节点,例如 ADDON../ADDON、FIELDSET../FIELDSET 等

我正在尝试使用 SSIS 脚本任务将插件、字段集中的每个数据值加载到 sql 表中。我的 sql 表中的列名将是 addon、fieldset 等。

下面是我的脚本任务代码

public void Main()
        {
            // TODO: Add your code here
            System.Data.SqlClient.SqlConnection sqlConn;
            System.Data.SqlClient.SqlCommand sqlCmd;

            string strFtpath = Dts.Variables["User::strFTPpath"].Value.ToString();
            string strArchivePath = Dts.Variables["User::strArchivePath"].Value.ToString();
            string strConnectionStr = Dts.Variables["User::strStagingConnstr"].Value.ToString();
            string strFileName = string.Empty;

            DirectoryInfo di = new DirectoryInfo(strFtpath.ToString());
            FileInfo[] getCSVFile = di.GetFiles("*.xml");
            foreach (FileInfo fi in getCSVFile)
            {
                strFileName = fi.FullName.ToString();
            }
            DataSet dsXml = new DataSet();

            XmlDocument readXml = new XmlDocument();

            try
            {
                readXml.Load(strFileName);
                using (sqlConn = new SqlConnection(strConnectionStr));
                {
                    sqlConn.Open();
                    sqlCmd = new SqlCommand("usp_XMLtoTable", sqlConn);
                    sqlCmd.CommandType = CommandType.StoredProcedure;
                    sqlCmd.Parameters.Add("@xml", SqlDbType.Xml).Value = dsXml.GetXml();
                    sqlCmd.ExecuteNonQuery();
                    sqlConn.Close();
                }

                Dts.TaskResult = (int)ScriptResults.Success;
                Dts.Variables["User::flgDataLoadStatus"].Value = 1;
            }
            catch (Exception e)
            {
                Dts.Log(e.Message, 0, null);
                Dts.TaskResult = (int)ScriptResults.Failure;
                Dts.Variables["User::flgDataLoadStatus"].Value = 0;
            }
        }

当我运行代码时,我得到了错误

根级别的数据无效。第 1 行,位置 1。

对于上面的代码。我知道它是因为我的 xml 文档中的前 7 行但是我不知道如何从 xml 文档中删除它,因为我无法手动操作。

我通过使用 XMLTextReader、XMLDocument、StreamReader 读取 xml 文档尝试了一些解决方法,但是我得到了相同的错误“根级别的数据无效”。

Importing data from XML file to SQL database

Pass XML as Parameter from C# to SQL Stored Procedure in VB.NET

我用来将 xml 数据保存到 sql 表的 SQL 过程将与此类似

CREATE PROCEDURE prc_readxmldata
(
@XMLdata XML
)
AS
BEGIN
SELECT
t.value('(FirstName/text())[1]','nvarchar(120)')AS FirstName ,
t.value('(LastName/text())[1]','nvarchar(120)')AS LastName,
t.value('(UserName/text())[1]','nvarchar(120)')AS UserName,
t.value('(Job/text())[1]','nvarchar(120)')AS Job
FROM
@XMLdata.nodes('/datapoints/packagedatapoints')AS TempTable(t)
END

谁能帮我解决我面临的错误。

【问题讨论】:

    标签: xml ssis script-task


    【解决方案1】:

    您正在尝试从“somefilename.xml”之类的内容加载 Xml

    XmlDocument readXml = new XmlDocument();
    
    try {
        readXml.Load(strFileName);
    

    您想先从该文件加载 xml 数据。试试这样的。

    XmlDocument readXml = new XmlDocument();
    
    try {
        var xmlFileContents = File.ReadAllText(strFileName);
        readXml.Load(xmlFileContents );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多