c# - 如何使用 TableMapping 而不是 TableName 填充数据集

标签 c#

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

The DataTableMapping name can be passed in place of the DataTable name to the Fill method of the DataAdapter.

下面的代码是 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 不属于数据表 dtEmployee ! 那么我该如何使用我的 ColumnMappings?

最佳答案

我认为您的论点顺序错误。来自 MSDN 文档:

The following example creates a DataTableMapping named AuthorsMapping for the Authors table.

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

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

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

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

关于c# - 如何使用 TableMapping 而不是 TableName 填充数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1621286/

相关文章:

c# - 在 OneWay 绑定(bind)上使用 ConvertBack 函数而不是 Convert 函数

c# - ASP.NET MVC。是否可以使用 MVC Foolproof Validation 进行数组验证?

c# - 我担心我添加了太多接口(interface)

c# - 通过 PHP 将数据从 MySQL 传递到 C# 应用程序

c# - C# 中的 WebSphere MQ 监听器

c# - 这会导致集合中的两个绑定(bind)绑定(bind)到同一个属性。参数名称 : binding error in c#?

c# - 在 C# 中使用泛型、约束和继承时出现编译时错误 : "Cannot convert from B to T1",

c# - .NET:事件的困难

c# - Container.Register(Type, Assembly[]) 不注册泛型实现

C# 连接必须有效并打开Mysql