0

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

我还有一个名为myTableint 类型的三个字段的数据表;

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

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

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

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();
        }
    }

我的代码中是否存在问题,或者是否有另一种方法可以映射字段?

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

4

2 回答 2

0

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

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

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

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

于 2012-06-11T16:38:11.290 回答
0

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

string SQL = "SELECT PK1 as field2 FROM users";
于 2012-06-11T16:45:34.400 回答