如何使用TableMapping而不是TableName填充DataSet

时间:2009-10-25 16:12:34

标签: c#

根据msdn http://msdn.microsoft.com/en-us/library/ks92fwwh.aspx

  

DataTableMapping名称可以是   传递代替DataTable名称   到DataAdapter的Fill方法。

以下代码使用TableName“Employee”

using System;
using System.Collections.Generic;
using System.Data;     
using System.Data.Common;
using System.Data.OleDb;

public class MyClass
{
    public static void Main()
    {
    OleDbConnection mySqlConnection =new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\nwind.Mdb");

    OleDbCommand mySqlCommand = mySqlConnection.CreateCommand();
    mySqlCommand.CommandText = "SELECT EmployeeID, FirstName, LastName " +
      "FROM Employees AS Emp " +
      "WHERE EmployeeID = 9";
    OleDbDataAdapter mySqlDataAdapter = new OleDbDataAdapter();
    mySqlDataAdapter.SelectCommand = mySqlCommand;
    DataSet myDataSet = new DataSet();

    DataTableMapping myDataTableMapping = mySqlDataAdapter.TableMappings.Add("Employees", "dtEmployee");

    Console.WriteLine("myDataTableMapping.DataSetTable = " + myDataTableMapping.DataSetTable);
    Console.WriteLine("myDataTableMapping.SourceTable = " + myDataTableMapping.SourceTable);

    myDataTableMapping.ColumnMappings.Add("EmployeeID", "dtEmployeeId");
    mySqlConnection.Open();
    mySqlDataAdapter.Fill(myDataSet, "Employee");
    mySqlConnection.Close();    

    DataTable myDataTable = myDataSet.Tables["dtEmployee"];
    foreach (DataRow myDataRow in myDataTable.Rows)
    {
      Console.WriteLine("ID = " + myDataRow["dtEmployeeId"]);
      Console.WriteLine("FirstName = " + myDataRow["FirstName"]);
      Console.WriteLine("LastName = " + myDataRow["LastName"]);
    }   
        Console.ReadLine();
    }

}

如果我在Fill中传递“dtEmployee”

mySqlDataAdapter.Fill(myDataSet, "dtEmployee");

它说dtEmployeeId不属于datatable dtEmployee! 那我怎么能用我的ColumnMappings呢?

1 个答案:

答案 0 :(得分:1)

我相信你的论点是错误的。来自MSDN文档:

  

以下示例创建名为 AuthorsMapping 的DataTableMapping   对于作者表。

workAdapter.TableMappings.Add("AuthorsMapping", "Authors");

我看起来正在为 dtEmployee 表创建名为 Employees 的DataTableMapping。尝试:

DataTableMapping myDataTableMapping = mySqlDataAdapter.TableMappings.Add("dtEmployee", "Employees");

为了澄清,现在您正在创建一个名为 Employees 的映射。然后,您将填充名为 dtEmployee 的DataTable。由于dtEMployeeId位于您的映射Employees而非您的数据表dtEmployee,因此它会抛出正确的错误“dtEmployeeId不属于 datatable dtEmployee”