2012-06-11 22 views
0

我有一个查询 - “SELECT PK1 FROM users”;C#sqldataadapter datatablemapping

我也有一个DataTable int型的三个字段命名myTable;

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

对于从我的查询返回的每一行,我想放PK1值到域2中myTable离开字段1和字段3空。

下面是一些示例代码,到目前为止,我已经试过了,但它似乎并不奏效。相反,字段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(); 
     } 
    } 

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

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

+0

这是2012年,为什么你使用'DataTable'? –

+1

因为我希望能够将数据存储在内存中,并在继续使用第二个数据库之前对其进行进一步处理。你有更好的建议吗? – user469453

+0

我还应该补充说这是我的第一个C#项目,所以任何提示/备选方案都非常值得欢迎,因为这对我来说是一次学习体验。 – user469453

回答

0

我想如果这是你的要求,那么就没有什么错误使用这种方法。 将您的查询更改为以下内容,并且不需要映射。

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

嗨阿西夫,谢谢 - 但问题是,我想插入PK1的值到field2中。然而,我的代码留下了所有三个字段为空,并添加一个新的字段PK1到我的DataTable – user469453

+0

结束检查我更新的答案。 –

+0

非常感谢Asif - 将此作为解决方法将非常有用。谢谢 – user469453

0

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

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

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

this.table.AutoSetDataBoundColumnHeaders = TRUE; this.table.SetDataBinding(table,null,“PK1”,null);

+0

DataTable似乎没有任何一种方法? – user469453