【问题标题】:C# sqldataadapter datatablemappingC# sqldataadapter 数据表映射
【发布时间】:2012-06-11 16:25:06
【问题描述】:

我有一个查询 - “SELECT PK1 FROM users”;

我还有一个名为 myTable 的数据表,其中包含三个 int 类型的字段;

-----------
| myTable |
-----------
| field1  |
| field2  |
| field3  |
-----------

对于从我的查询返回的每一行,我想将 PK1 值放入myTable 中的 field2 中,而 field1 和 field3 为空。

这是迄今为止我尝试过的一些示例代码,但它似乎不起作用。而是将字段 PK1 作为新字段附加到 myTable 的末尾。

class Program
    {
        static void Main(string[] args)
        {
            string SQL = "SELECT PK1 FROM users";
            SqlConnection connection = new SqlConnection([my connection string]);
            DataTable myTable = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter();

            adapter.SelectCommand = new SqlCommand(SQL, connection);
            myTable.Columns.Add("field1", typeof(Int32));
            myTable.Columns.Add("field2", typeof(Int32));
            myTable.Columns.Add("field3", typeof(Int32));
            DataTableMapping dataMapping = adapter.TableMappings.Add("myTable", "users");
            dataMapping.ColumnMappings.Add("PK1", "field2");

            adapter.Fill(myTable);

            foreach (DataRow row in myTable.Rows)
            {
                Console.WriteLine("------------");
                foreach (DataColumn column in myTable.Columns)
                {
                    Console.WriteLine(column.ColumnName + " : " + row[column]);
                }
            }


            Console.ReadKey();
        }
    }

我的代码是否存在问题,或者是否有其他方法可以映射字段?

这是一个用于此问题的简化示例,因为这样映射字段名称将是理想的,而不是在给定位置插入值。

【问题讨论】:

  • 现在是 2012 年,你为什么用DataTable
  • 因为我希望能够将数据存储在内存中并在持久保存到第二个数据库之前进一步对其进行操作。你有更好的建议吗?
  • 我还应该补充一点,这是我的第一个 C# 项目,所以任何提示/替代方案都非常受欢迎,因为这对我来说将是一次学习体验。
  • 您可以创建一个更好地表示您正在操作的数据的类,并使用某种类型的 ORM (NHibernate) 来持久化更改。
  • 你能举个例子说明我将如何创建类和对象吗?

标签: c# datatable sqldataadapter columnmappings


【解决方案1】:

我认为如果这是您的要求,那么这种方法没有任何问题。 将您的查询更改为以下内容,您不需要映射。

string SQL = "SELECT PK1 as field2 FROM users";

【讨论】:

  • 嗨 Asif,谢谢 - 但问题是我想将 PK1 的值插入到 field2 中。但是我的代码将所有三个字段都保留为空,并将 PK1 的新字段添加到我的 DataTable 的末尾
  • 谢谢 Asif - 使用它作为解决方法会很棒。谢谢
【解决方案2】:

它正在添加列,因为你告诉它。您应该使用 datamappingColumn 功能或 table.column.add 功能,不要同时使用它们,它们是多余的,可能没有必要。

所以如果你离开 table.column.add()

这是一个示例,说明如何将列名“绑定”到您在表中设置的列,指定您希望它们出现的顺序,您可以通过“”双引号将它们留空或设置它们使用 NULL 为 null。

this.table.AutoSetDataBoundColumnHeaders = true; this.table.SetDataBinding(table, null, "PK1", null);

【讨论】:

  • DataTable 好像没有这两种方法?
猜你喜欢
  • 2011-07-23
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2010-11-04
  • 2015-09-17
相关资源
最近更新 更多