使用 c# asp.net 获取 XML 数据并插入到 sql server

Posted

技术标签:

【中文标题】使用 c# asp.net 获取 XML 数据并插入到 sql server【英文标题】:Take XML data and insert into sql server use c# asp.net 【发布时间】:2019-01-22 03:55:30 【问题描述】:

现在我正在尝试提供一些服务,我可以在其中读取 xml 文件并将其解析为 sql server,我已经阅读并看到许多教程如何使用 c# 将 xml 解析为 sql server 但我仍然无法接受数据。

<?xml version="1.0" encoding="utf-8" ?>
<Source 1 - Subject 17>
    SubjectType: Faces
    FaceConfidence: 100
    <appeared at 02/08/2018 5:28:43 PM> 
        FrameIndex: 1033
        Rectangle: at (210;169), width=63, height=84
    </appeared at 02/08/2018 5:28:43 PM>
    <track at 02/08/2018 5:28:44 PM> 
        FrameIndex: 1050
        Rectangle: at (210;134), width=70, height=94
        <Details available on frame 1050> 
            FrameIndex: 1050
            Status: Ok
            Eyes at: (260; 169) and (229; 169)
            Rectangle: at (210;134), width=70, height=94
        </Details available on frame 1050>
    </track at 02/08/2018 5:28:44 PM>
    <disappeared at 02/08/2018 5:28:46 PM> 
        TimeStamp: 02/08/2018 5:28:46 PM
        <Top 1000 of Best Matches> 
        no matches found
        </Top 1000 of Best Matches>
        Contains successfully generated template
    </disappeared at 02/08/2018 5:28:46 PM>
</Source 1 - Subject 17>

这是 xml 文件格式,这是我的尝试:

protected void Button1_Click(object sender, EventArgs e)

    string cs = @"Data Source=172.16.6.39;Initial Catalog=FC_SCAN;Persist Security Info=True;User ID=fc_adm;Password=P@ssw0rd";
    SqlConnection con = new SqlConnection(cs);

    XmlDocument doc = new XmlDocument();
    doc.Load("test.xml");

    var source = doc.DocumentElement.SelectNodes("Source").Cast<XmlElement>().ToList();

    var appeared = source[0].GetAttribute("Appeared");
    var disappeared = source[0].GetAttribute("Disappeared");
    var top = source[0].GetAttribute("Top");

    SqlCommand cmd;
    SqlDataAdapter da = new SqlDataAdapter();
    string sql = null;
    con.Open();
    sql = "Insert into Source values ('" + source + "','" + appeared + "','" + disappeared + "','"+top+"')";
    cmd = new SqlCommand(sql, con);
    da.InsertCommand = cmd;
    da.InsertCommand.ExecuteNonQuery();
    con.Close();

错误控制台总是出现在 xml 文件中,如果有任何帮助、技巧或提示,我将不胜感激。

【问题讨论】:

查看Loading a DataSet from XML ...这会让事情变得容易得多。 SQL 表是什么样的?我将处理 xml 错误。应该很快就有答案了。 谢谢 filburt,我会试试的,对于表格格式,我只是使用带有字段源、出现、消失和顶部的 nvarchar。 你从哪里得到这个格式很糟糕的 xml? @DwiRahmanIsmail 您无法控制其他应用程序,因为如果您这样做,您应该输出有效的 xml? 【参考方案1】:

当我启动你的代码时,我立即在

处得到一个异常
 doc.Load("test.xml");

线。异常信息很清楚:

An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll
Additional information: Name cannot begin with the '1' character, hexadecimal value 0x31. Line 2, position 9.

显然,它不喜欢名为“Source 1 - Subject 17”、“appeared at 02/08/2018 5:28:43 PM”等的 XML 标签。

更新:

您不能使用 .Net XML 操作的东西,因为您的文件不是 XML(它声称是带有标题的 XML,但它有点撒谎)。如果您仍需要将此文件的内容放入数据库中,则必须编写自定义解析例程来读取该自定义数据格式,或者如果可能,请联系为您生成此“XML”的人员并说服他们将它们的数据格式更改为真正的 XML。如果您在同一个组织等工作,这可能是最简单的方法。

【讨论】:

我很确定这是一个无效的 xml 文件 是的,实际上它是程序的输出,所以你是对的,它看起来不像通常的 xml 格式,我必须提供一些服务来将此输出中的数据导入 sql server 更新了答案以解决您的问题。 谢谢,也许更容易与制作程序的程序员交谈。谢谢你的帮助..【参考方案2】:

你的 xml 很糟糕。我在下面修复了它:

<?xml version="1.0" encoding="utf-8" ?>
<Source>
  <SubjectType>Faces</SubjectType>
  <FaceConfidence>100</FaceConfidence>
  <appeared>
    02/08/2018 5:28:43 PM>
    <FrameIndex>1033</FrameIndex>
    <Rectangle top="210" left="169"  />
  </appeared>
  <track>
    02/08/2018 5:28:44 PM>
    <FrameIndex>1050</FrameIndex>
    <Rectangle top="210" left="134"  />
    <Details>
      <FrameIndex>1050</FrameIndex>
      <Status>Ok</Status>
      <Eyes>
        <location x="260" y="169"/>
        <location x="229" y="169"/>
      </Eyes>
      <Rectangle top="210" left="134"  />
    </Details>
  </track>
  <disappeared>
    <TimeStamp>02/08/2018 5:28:46 PM</TimeStamp>
    <Top_1000> no matches found</Top_1000>
  </disappeared>
</Source>

【讨论】:

感谢您的帮助,我将保存此格式。我真的很感激..【参考方案3】:

我不是 100% 支持 jdweng​​strong> 的答案,但他的想法指出我实际上应该有多个根元素。 所以我认为每个来源都有自己的来源和主题ID。

    <?xml version="1.0" encoding="utf-8" ?>
<Source>
<Source id="1">
<Subject id="17">
  <SubjectType>Faces</SubjectType>
  <FaceConfidence>100</FaceConfidence>
  <appeared>
    02/08/2018 5:28:43 PM
    <FrameIndex>1033</FrameIndex>
    <Rectangle top="210" left="169"  />
  </appeared>
  <track>
    02/08/2018 5:28:44 PM
    <FrameIndex>1050</FrameIndex>
    <Rectangle top="210" left="134"  />
    <Details>
      <FrameIndex>1050</FrameIndex>
      <Status>Ok</Status>
      <Eyes>
        <location x="260" y="169"/>
        <location x="229" y="169"/>
      </Eyes>
      <Rectangle top="210" left="134"  />
    </Details>
  </track>
  <disappeared>
    <TimeStamp>02/08/2018 5:28:46 PM</TimeStamp>
    <Top_1000> no matches found</Top_1000>
  </disappeared>
</Subject>
</Source>

<Source id="2">
<Subject id="18">
  <SubjectType>Faces</SubjectType>
  <FaceConfidence>101</FaceConfidence>
  <appeared>
    02/08/2018 6:28:43 PM
    <FrameIndex>1034</FrameIndex>
    <Rectangle top="210" left="169"  />
  </appeared>
  <track>
    02/08/2018 6:28:44 PM
    <FrameIndex>1051</FrameIndex>
    <Rectangle top="210" left="134"  />
    <Details>
      <FrameIndex>1051</FrameIndex>
      <Status>Ok</Status>
      <Eyes>
        <location x="260" y="169"/>
        <location x="229" y="169"/>
      </Eyes>
      <Rectangle top="210" left="134"  />
    </Details>
  </track>
  <disappeared>
    <TimeStamp>02/08/2018 6:28:46 PM</TimeStamp>
    <Top_1000> no matches found</Top_1000>
  </disappeared>
  </Subject>
  </Source>
</Source>

【讨论】:

以上是关于使用 c# asp.net 获取 XML 数据并插入到 sql server的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET C# Web 应用程序中使用 ADO.NET 和 XML

如何使用 c# asp.net 从 url 获取数据?

ASP.NET MVC 与 XSL

如何从列表视图中获取数据作为字符串 C# asp.net

如何从 ASP.net MVC 程序中获取纯 c# 程序中的 JSON 数据?

使用 C# 从 ASP.Net MVC 中的视频文件中获取视频元数据的最佳方法是啥?