【问题标题】:How to get data from one table and add into another table in C# DataSet?如何从一个表中获取数据并添加到 C# DataSet 中的另一个表中?
【发布时间】:2017-05-25 17:38:04
【问题描述】:

我有一个复杂的 xml 文件,我读取了 xml 并将数据存储到 DataSet 对象中。 DataSet 包含以下 DataTable

1.Customer
2.Operation 
3.Account 
4.Card

Customer DataTable 有很多列有CustomerId 和SerialNo。其他 DataTable 有 SerialNo 列常见。我需要根据 SerialNo 将 CustomerId 列值添加到其他(操作、帐户和卡)数据表中,并且需要将所有表数据存储到数据库中。我该怎么做,请举例说明。

【问题讨论】:

  • 请展示示例数据,您的表格结构,以及您目前尝试的内容,帮助我们为您提供帮助
  • 您的最终目标是更新 sql server 数据库中的这些表还是仅仅更新数据集?
  • 您好,欢迎来到 SO。你似乎需要帮助。但是,您似乎也忘记了发布有关您的系统或您正在尝试做什么的任何详细信息。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
  • @Joshua Evensen,我的目标是更新 sql server 数据库中的这些表。
  • 是的,在这个问题上提供更多信息,人们会更愿意提供帮助。我也不知道 System.Data.DataTable 被使用的事实真的很重要。你可能只需要运行一个查询来做你正在谈论的事情。

标签: c# sql-server xml


【解决方案1】:

C#代码:

 DataSet ds = new DataSet();
        try
        {
            ds.ReadXml(@"D:\Test.xml");               

            DataTable dtstatement = ds.Tables["Statement"];

            foreach (DataRow dr in dtstatement.Rows)
            {
                Statement statement = new Statement();
                statement.IdClient = Convert.ToInt32(dr["IdClient"].ToString());
                statement.StatementNo = Convert.ToInt32(dr["StatementNo"].ToString());

                DataRow[] selectedCards = ds.Tables["card"].Select(string.Format("StatementNo = {0}", statement.StatementNo));
                if (selectedCards.Length > 0)
                {
                    foreach (var item in selectedCards)
                    {
                        Card card = new Card();
                        card.IdClient = statement.IdClient;
                        card.CardNo = item["cardNo"].ToString();
                    }
                }
                DataRow[] selectedAccounts = ds.Tables["Account"].Select("StatementNo = " + statement.StatementNo);
                if (selectedAccounts.Length > 0)
                {
                    foreach (var item in selectedAccounts)
                    {
                        Account account = new Account();
                        account.IdClient = statement.IdClient;
                        account.AccountNo = item["AccountNo"].ToString();
                    }
                }
            }
        }
        catch (Exception ex)
        {

        }

XML:

<?xml version="1.0" encoding="utf-8"?>
<Statements>
 <Statement>
    <StatementNo>1</StatementNo>
    <IdClient>101</IdClient>
    <Cards>
        <card>
            <StatementNo>1</StatementNo>
            <cardNo>123456</cardNo>
        </card>
        <card>
            <StatementNo>1</StatementNo>
            <cardNo>1234567</cardNo>
        </card>
    </Cards>
    <Accounts>
        <Account>
            <StatementNo>1</StatementNo>
            <AccountNo>123456</AccountNo>
        </Account>
        <Account>
            <StatementNo>1</StatementNo>
            <AccountNo>1234567</AccountNo>
        </Account>
    </Accounts>
</Statement>
 <Statement>
    <StatementNo>2</StatementNo>
    <IdClient>102</IdClient>
    <Cards>
        <card>
            <StatementNo>2</StatementNo>
            <cardNo>12345678</cardNo>
        </card>         
    </Cards>
  </Statement>
</Statements>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多