【问题标题】:How to fill a SQL Server database in a C# winform如何在 C# winform 中填充 SQL Server 数据库
【发布时间】:2013-11-12 08:52:09
【问题描述】:

我正在用 C# 编写一个 Winforms 应用程序,它将数据存储到 Xml,然后通过电子邮件发送。这两件事以其基本形式运行。

但现在我正在努力解决如何将此 Xml 文件放入 SQL Server 数据库中。我知道您可以将值作为 Xml 存储到 SQL Server 中。但是有没有办法将 Xml 数据存储为intvarchar 等?或者一般来说是如何处理的?

提前致谢!

以下是Xml - 存储函数:

private void btnWriteCustomerToXml(object sender, EventArgs e) 
{
    Customer[] Kunden = new Customer[5];
    Customer[0] = new Customer(1, "John", "A", 10000);
    Customer[1] = new Customer(2, "John", "B", 20000);
    Customer[2] = new Customer(3, "John", "C", 30000);
    Customer[3] = new Customer(4, "John", "D", 40000);
    Customer[4] = new Customer(5, "John", "E", 50000);

    using (XmlWriter writer = XmlWriter.Create("TestMail.xml"))
    {
       writer.WriteStartDocument();
       writer.WriteStartElement("Employee");

       foreach (Customer employee in Customer)
       {
           writer.WriteStartElement("Employee");
           writer.WriteElementString("ID", employee.Id.ToString());
           writer.WriteElementString("Vorname", employee.FirstName);
           writer.WriteElementString("Nachname", employee.LastName);

           writer.WriteEndElement();
       }

       writer.WriteEndElement();
       writer.WriteEndDocument();

       string output = "XML file was successfully created!";
       MessageBox.Show(output);
   }
}           

【问题讨论】:

  • 创建一个表Customer,其中包含Id(int)、Vorname (VARCHAR)、Nachname (VARCHAR) 列,然后将值插入到该表中。这是你想要的吗?
  • 是的,完全正确。我已经有一个名为 Employee 的测试表,其中包含 Employee、Id 等。那里我想把 Xml 数据放进去。
  • 那么问题是如何从xml文件中读取数据,对吧?
  • 是的,完全正确。测试表的列命名和排序类似于上面代码示例中的 XML 文档模式。

标签: c# sql xml winforms


【解决方案1】:

您可以使用 SQL Server 中的本机 XQuery 支持将您的 XML“分解”为关系数据并将其存储 - 如下所示:

-- declare input - could be the input parameter of a stored procedure or something
DECLARE @input XML = '<Employees><Employee><ID>4040</ID><Vorname>Dieter</Vorname><Nachname>Mueller</Nachname></Employee></Employees>'

-- INSERT INTO your table
INSERT INTO dbo.Employee(ID, Vorname, Nachname)
    -- shred the incoming XML into rows of data, based on the XPath /Employees/Employee
SELECT
    XEmp.value('(ID)[1]', 'int'),
    XEmp.value('(Vorname)[1]', 'varchar(50)'),
    XEmp.value('(Nachname)[1]', 'varchar(50)')
FROM 
    @input.nodes('/Employees/Employee') AS XTbl(XEmp)

【讨论】:

  • 谢谢,我试试这个。
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多