表1有这样一个列。。[部门ID]表2为部门ID与部门名称的对照表。。现在想把表1的部门ID列用来显示部门名称,应该怎样做。。问题比较傻,定义什么foreignKey之类的知识早就丢到天边了-_-希望达人不吝赐教:)顺便继续问以前的问题,combobox绑定dataset后如何再添加一个项上去。。我的想法是这样的,combobox用来显示部门,其valuemember是部门ID,通过selectedmember来控制某dataGrid的内容(部门员工,还有其他查询条件,例如sex) 问题是想要显示所有部门的员工就比较麻烦了。。希望添加一个不属于dataset中部门列表的条目上去 代表全部部门。

解决方案 »

  1.   

    DataSet 对象是 Microsoft .NET 框架中数据访问的关键部分,是可保存表、视图和关系的内存中对象。本文介绍如何使用一个或多个数据库查询的结果填充 DataSet 对象,以及在将这些数据加载到 DataSet 对象中后如何访问这些数据。 
    要求
    下面的列表列出了推荐使用的硬件、软件、网络基础结构以及所需的服务包:• Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server 或 Windows NT 4.0 Server 
    • Microsoft SQL Server 7.0、Microsoft SQL Server 2000 或安装了 Pubs 示例数据库的 Microsoft 数据引擎 
    • Microsoft Visual Studio .NET 
    本文假定您熟悉下面的主题:• 数据库术语 
    • 结构化查询语言 (SQL) 填充 DataSet
    从 System.Data 名称空间使用多种对象,您可以连接到一个数据库服务器,运行查询,然后把结果放到 DataSet 对象中。DataSet 是断开连接的对象。因此,加载数据后,在您想加载更多数据或想使用您对这些信息的内存中副本所作的更改更新服务器之前,不会再使用与数据库的连接。若要将数据从数据库加载到 DataSet 中,请按照下列步骤操作:1. 启动 Visual Studio .NET。 
    2. 在 Visual C# .NET 中新建一个"控制台应用程序"项目。Visual Studio .NET 为您创建一个静态类和一个空的 Main 过程。 
    3. 确保项目引用 System 和 System.Data 这两个名称空间。 
    4. 对 System、System.Data 和 System.Data.SqlClient 名称空间使用 using 语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。必须在任何其他声明之前使用这些语句。 using System;
    using System.Data;
    using System.Data.SqlClient;
     
    5. 从数据库向 DataSet 获取数据的第一步是建立数据库连接,这需要一个 System.Data.SqlClient.SqlCommand 对象和一个连接字符串。下面代码中的连接字符串连接着位于本地计算机(运行这些代码的计算机)上的 SQL Server 服务器。您必须根据环境相应地修改该连接字符串。创建 SqlConnection 对象后,请调用该对象的 Open 方法以建立实际的数据库链接。 string sConnectionString;
    sConnectionString = "Password=myPassword;User ID=myUserID;"
       + "Initial Catalog=pubs;"
    + "Data Source=(local)";
    SqlConnection objConn
    = new SqlConnection(sConnectionString);
    objConn.Open();
     
    6. 创建一个 DataAdapter 对象,它表示数据库和 DataSet 对象之间的链接。您可以将 SQL 或另一类型的用于检索数据的命令指定为 DataAdapter 的构造函数对象的一部分。下面的示例使用了一个 SQL 语句从 Pubs 数据库的 Authors 表检索记录。 SqlDataAdapter daAuthors
    = new SqlDataAdapter("Select * From Authors", objConn);
     
    7. 必须声明并创建 DataSet 对象的一个实例,此时您应为整个 DataSet 提供一个名称,然后才能开始加载任何数据。该名称可包含若干独立的表。 DataSet dsPubs = new DataSet("Pubs");
     
    8. SqlDataAdapter 类提供 Fill 和 FillSchema 两种方法,这对于加载这些数据很关键。这两种方法均可将信息加载到 DataSet 中。Fill 加载数据本身,而 FillSchema 加载有关特定表的所有可用的元数据(如列名、主键和约束)。处理数据加载的正确方式是先运行 FillSchema,后运行 Fill。例如: daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
    daAuthors.Fill(dsPubs,"Authors");
    如果您只使用 Fill,则只能加载描述列名和数据类型所需要的基本元数据。Fill 方法不加载主键信息。若要更改此默认行为,可以将 DataAdapter 对象的 MissingSchemaAction 属性设置为 MissingSchemaAction.AddWithKey,该属性会将主键元数据与默认信息一起加载。例如: daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    daAuthors.Fill(dsPubs,"Authors");
     
    9. 这些数据此时作为 DataSet 的 Tables 集合内独立的 DataTable 对象来提供。如果您在对 FillSchema 和 Fill 的调用中指定了一个表名,则可以使用该名称访问您需要的特定表。 DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];
     
    10. 可以使用 For Each 循环依次通过一个 DataTable 的 Rows 集合内所有 DataRow 对象。这将使您能够访问表的每一行。可以按名称或按位置索引("0"是第一个列位置)访问列。例如: foreach (DataRow drCurrent in tblAuthors.Rows)
    {
    Console.WriteLine("{0} {1}",
    drCurrent["au_fname"].ToString(),
    drCurrent["au_lname"].ToString());
    }
    Console.ReadLine();
     
    11. 保存项目。在调试菜单上,单击开始以运行您的项目,并确保它能正常运行。  
    完整代码列表 
    using System;
    using System.Data;
    using System.Data.SqlClient;namespace PopulateDataSet
    {
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
    static void Main(string[] args)
    {
    string sConnectionString;
    sConnectionString = "Password=myPassword;User ID=myUserID;"
    + "Initial Catalog=pubs;"
    + "Data Source=(local)";
    SqlConnection objConn
    = new SqlConnection(sConnectionString);
    objConn.Open(); SqlDataAdapter daAuthors
    = new SqlDataAdapter("Select * From Authors", objConn);
    DataSet dsPubs = new DataSet("Pubs");
    daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
    daAuthors.Fill(dsPubs,"Authors"); DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"]; foreach (DataRow drCurrent in tblAuthors.Rows)
    {
    Console.WriteLine("{0} {1}",
    drCurrent["au_fname"].ToString(),
    drCurrent["au_lname"].ToString());
    }
    Console.ReadLine();
    }
    }
    }
      

  2.   

    是否可以这样做?
    myds.tables[0]对应表1,myds.tables[1]对应表2.for(int i=0;i<myds.tables[0].rows[0].count;i++)
    {
       for(int j=0;j<myds.tables[1].rows[0].count;i++)
      {
        if(myds.tables[0].rows[i]["bmID"].toString()==myds.tables[1].rows[j]["bmID"].toString())
         {
           Response.write(myds.tables[0].rows[j]["bmName"].toString())'
         }
       }
    }这样便可以输出所有表1与表2“ID”相对应的部门的名称了。代码我是在窗口打的,可能有大小写等问题,你看懂就行。