【问题标题】:Output XMLWriter to XML file. Select SQL and save to XML将 XMLWriter 输出到 XML 文件。选择 SQL 并保存到 XML
【发布时间】:2018-02-13 12:02:08
【问题描述】:

我有一个 sql 查询,从 2 个表中选择一些数据。我从表中获取这些数据。我想从数据中创建一个 xml 文件。 我的程序代码:

        string sConnectionString;
        sConnectionString = "Data Source=NAMESERWER;Initial Catalog=BAZA;Persist Security Info=True;User ID=user; Password=password;";
        SqlConnection objConn
        = new SqlConnection(sConnectionString);
        objConn.Open();


        SqlDataAdapter faktura = new SqlDataAdapter("SELECT  [t0].[Faktura] as 'InvoiceNumber', [t0].[FATrN_Data2] as 'Date', [t0].[FATrN_Data3] as 'InvoiceIssueDate',  DATEADD(DD, 90, [t0].[FATrN_Data3]) as 'InvoiceDueDate', '90' as 'PaymentTerms', 'I' as 'PaymentTermsReferenceDate' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);

        SqlDataAdapter paymentmethod1 = new SqlDataAdapter("SELECT  'P' as 'CODE', 'Przelew' as 'Description' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);




        DataSet ds = new DataSet("Invoice");
        faktura.Fill(ds, "InvoiceHeader");

       paymentmethod1.Fill(ds, "PaymentMethod");


        XDocument doc1 = new XDocument(
new XDeclaration("1.0", null, null));


        dataGridView1.DataSource = ds;
        ds.WriteXml(@"c:\test.xml");
        dataGridView1.DataSource = ds;
        objConn.Close();

    }

程序代码创建一个文件 XML c:\test.xml

 <?xml version="1.0" standalone="yes"?>
<Invoice>
  <InvoiceHeader>
    <InvoiceNumber>(S)FS-551/03/2017</InvoiceNumber>
    <Date>2017-03-31T00:00:00+02:00</Date>
    <InvoiceIssueDate>2017-03-30T00:00:00+02:00</InvoiceIssueDate>
    <InvoiceDueDate>2017-06-28T00:00:00+02:00</InvoiceDueDate>
    <PaymentTerms>90</PaymentTerms>
    <PaymentTermsReferenceDate>I</PaymentTermsReferenceDate>
  </InvoiceHeader>
  <PaymentMethod>
    <CODE>P</CODE>
    <Description>Przelew</Description>
  </PaymentMethod>
</Invoice>

我希望文件 XML 看起来像这样:

<?xml version="1.0"?>
<Invoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <InvoiceHeader>
    <InvoiceNumber>FSE-551/03/2017</InvoiceNumber>
    <Date>2018-03-31</Date>
    <InvoiceIssueDate>2017-03-30</InvoiceIssueDate>
    <InvoiceDueDate>2017-06-28</InvoiceDueDate>
    <PaymentTerms>30</PaymentTerms>
    <PaymentTermsReferenceDate>I</PaymentTermsReferenceDate>
    <PaymentMethod>
      <Code>P</Code>
      <Description>Transfer</Description>
    </PaymentMethod>
  </InvoiceHeader>
  </Invoice>

怎么做?

【问题讨论】:

    标签: c# sql xml c#-4.0


    【解决方案1】:

    以下应该可以工作:

            static void Main(string[] args)
            {
                string sConnectionString;
                sConnectionString = "Data Source=NAMESERWER;Initial Catalog=BAZA;Persist Security Info=True;User ID=user; Password=password;";
                SqlConnection objConn = new SqlConnection(sConnectionString);
                objConn.Open();
    
    
                SqlDataAdapter faktura = new SqlDataAdapter("SELECT  [t0].[Faktura] as 'InvoiceNumber', [t0].[FATrN_Data2] as 'Date', [t0].[FATrN_Data3] as 'InvoiceIssueDate',  DATEADD(DD, 90, [t0].[FATrN_Data3]) as 'InvoiceDueDate', '90' as 'PaymentTerms', 'I' as 'PaymentTermsReferenceDate' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);
    
                SqlDataAdapter paymentmethod1 = new SqlDataAdapter("SELECT  'P' as 'CODE', 'Przelew' as 'Description' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);
    
    
                DataSet ds = new DataSet("Invoice");
                faktura.Fill(ds, "InvoiceHeader");
    
                MemoryStream stream = new MemoryStream();
    
                ds.WriteXml(stream);
                stream.Position = 0;
                XDocument doc = XDocument.Load(stream);
    
                XElement invoice = doc.Element("Invoice");
    
                DataTable dt = new DataTable("PaymentMethod");
                paymentmethod1.Fill(dt);
    
                stream = new MemoryStream();
                dt.WriteXml(stream);
                stream.Position = 0;
                XElement paymentMethod = XElement.Load(stream);
    
                invoice.Add(paymentMethod);
            }
    

    【讨论】:

      【解决方案2】:

      @jdweng

      private void button5_Click(object sender, EventArgs e)
              {
      
                  string sConnectionString;
                  sConnectionString = "Data Source=SERWER;Initial Catalog=baza;Persist Security Info=True;User ID=user; Password=pass;";
                  SqlConnection objConn = new SqlConnection(sConnectionString);
                  objConn.Open();
      
      
                  SqlDataAdapter faktura = new SqlDataAdapter("SELECT  [t0].[Faktura] as 'InvoiceNumber', [t0].[FATrN_Data2] as 'Date', [t0].[FATrN_Data3] as 'InvoiceIssueDate',  DATEADD(DD, 90, [t0].[FATrN_Data3]) as 'InvoiceDueDate', '90' as 'PaymentTerms', 'I' as 'PaymentTermsReferenceDate' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);
      
                  SqlDataAdapter paymentmethod1 = new SqlDataAdapter("SELECT  'P' as 'CODE', 'Przelew' as 'Description' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);
      
      
                  DataSet ds = new DataSet("Invoice");
                  faktura.Fill(ds, "InvoiceHeader");
      
                  MemoryStream stream = new MemoryStream();
      
                  ds.WriteXml(@"c:\test1.xml");
                  stream.Position = 0;
                  XDocument doc = XDocument.Load(@"c:\test1.xml");
      
                  XElement invoice = doc.Element("Invoice");
      
                  DataTable dt = new DataTable("PaymentMethod");
                  paymentmethod1.Fill(dt);
      
                  stream = new MemoryStream();
                  dt.WriteXml(@"c:\test1.xml");
                  stream.Position = 0;
                  XElement paymentMethod = XElement.Load(@"c:\test1.xml");
      
                  invoice.Add(paymentMethod);
              }
          }
      }
      

      xml 现在看起来像这样:(:

      <?xml version="1.0" standalone="yes"?>
      <DocumentElement>
        <PaymentMethod>
          <CODE>P</CODE>
          <Description>Przelew</Description>
        </PaymentMethod>
      </DocumentElement>
      

      【讨论】:

      • 看起来与原始帖子有所不同。 “DocumentElement”从何而来?
      【解决方案3】:

      这是原始代码

      private void button5_Click(object sender, EventArgs e)
              {
      
                  string sConnectionString;
                  sConnectionString = "Data Source=SERWER;Initial Catalog=baza;Persist Security Info=True;User ID=user; Password=pass;";
                  SqlConnection objConn = new SqlConnection(sConnectionString);
                  objConn.Open();
      
      
                  SqlDataAdapter faktura = new SqlDataAdapter("SELECT  [t0].[Faktura] as 'InvoiceNumber', [t0].[FATrN_Data2] as 'Date', [t0].[FATrN_Data3] as 'InvoiceIssueDate',  DATEADD(DD, 90, [t0].[FATrN_Data3]) as 'InvoiceDueDate', '90' as 'PaymentTerms', 'I' as 'PaymentTermsReferenceDate' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);
      
                  SqlDataAdapter paymentmethod1 = new SqlDataAdapter("SELECT  'P' as 'CODE', 'Przelew' as 'Description' FROM [CDN].[INEcodFANaglo] AS [t0] WHERE ([t0].[TrN_GIDNumer] = '1015871') AND ([t0].[TrN_GIDTyp] = '2033')", objConn);
      
      
                  DataSet ds = new DataSet("Invoice");
                  faktura.Fill(ds, "InvoiceHeader");
      
                  MemoryStream stream = new MemoryStream();
      
                  ds.WriteXml(@"c:\test1.xml");
                  stream.Position = 0;
                  XDocument doc = XDocument.Load(@"c:\test1.xml");
      
                  XElement invoice = doc.Element("Invoice");
      
                  DataTable dt = new DataTable("PaymentMethod");
                  paymentmethod1.Fill(dt);
      
                  stream = new MemoryStream();
                  dt.WriteXml(@"c:\test1.xml");
                  stream.Position = 0;
                  XElement paymentMethod = XElement.Load(@"c:\test1.xml");
      
                  invoice.Add(paymentMethod);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-15
        • 2013-12-10
        • 2011-10-10
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多