2

有没有一种简单的方法可以将整个 Access 文件 (.mdb) 读入 .NET(特别是 C# 或 VB)中的 DataSet?

或者至少从访问文件中获取表列表,以便我可以遍历它并将它们一次添加到数据集中?

4

5 回答 5

5

感谢您的建议。我能够使用这些示例将这段代码放在一起,这似乎实现了我正在寻找的东西。

Using cn = New OleDbConnection(connectionstring)
    cn.Open()
    Dim ds As DataSet = new DataSet()

    Dim Schema As DataTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    For i As Integer = 0 To Schema.Rows.Count - 1
        Dim dt As DataTable = New DataTable(Schema.Rows(i)!TABLE_NAME.ToString())

        Using adapter = New OleDbDataAdapter("SELECT * FROM " + Schema.Rows(i)!TABLE_NAME.ToString(), cn)
            adapter.Fill(dt)
        End Using

        ds.Tables.Add(dt)
    Next i
End Using
于 2008-09-05T18:40:24.960 回答
3

您应该能够使用OleDbConnection访问它。

下面是关于使用它来访问 MS Access 文件的 DB 访问。

在获取表名方面,在我 VB6 的日子里,我一直使用 ADOX,不知道他们现在是如何在 .NET 中做到这一点的。虽然我知道访问文件中有一个系统表 - 想说“mso ... ”。我谷歌!

编辑

啊哈!系统对象!!xD

于 2008-09-05T18:31:43.653 回答
2

MSDN有一篇关于如何使用 ADO.NET 连接和编辑 Access 数据库中的记录的文章。建立 OleDB 连接后,您可以轻松创建 DataReader/DataAdapter 并根据需要进行处理。

编辑:啊!诅咒你 Rob 和你神一样的打字能力!!!8^D

于 2008-09-05T18:31:57.430 回答
0

Less Than Dot中有关于这一点的讨论。这是讨论中的一个代码示例。

   public DataTable GetColumns(string tableName)
    {
        string[] restrictions = new string[4];
        restrictions[2] = tableName;

        _connDb.Open();

        DataTable mDT = _connDb.GetSchema("Columns", restrictions);

        _connDb.Close();

        return mDT;
    }
于 2008-09-05T18:43:19.257 回答
0

你原来的问题措辞是无稽之谈:

有没有一种简单的方法可以将整个 Access 文件 (.mdb) 读入...

您当然想要 MDB 文件的全部内容。您想要的是存储在 MDB 中的数据表的内容。请记住,您也不想要系统表的内容。

关键点:

你问的是 JET,而不是 ACCESS。

Jet 是作为 Access 的默认数据存储(以及 Access 自己的对象存储在其中)提供的数据库引擎。但是“访问”不仅仅意味着数据表。

每当您提出问题并将 Access 和 Jet 混淆时,您可能至少会得到一些无用的答案。

你会被我这样的人骂,因为开发人员真的应该知道不要混淆关键的区别。

于 2008-09-15T22:07:44.720 回答