将访问文件读入数据集

时间:2020-03-05 18:48:25  来源:igfitidea点击:

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

还是至少要从访问文件中获取表列表,以便我可以遍历表并将其一次添加到DataSet中?

解决方案

回答

我们应该能够使用OleDbConnection访问它。

这是有关使用DB Access访问MS Access文件的评论。

在获取表名方面,在我的VB6日子里,我一直使用ADOX,不确定现在在.NET中如何使用它们。.尽管我知道访问文件中有一个系统表想说" mso ..."。 。我谷歌!

编辑

啊哈! msysobjects! xD

回答

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

编辑:加!诅咒你的罗布和你像神一样的打字能力!!! 8 ^ D

回答

感谢建议。我能够使用这些样本来组合这段代码,这似乎实现了我想要的功能。

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

回答

在《不到点》中对此进行了讨论。这是讨论中的一个代码示例。

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;
    }

回答

我们最初的措辞是胡说八道:

Is there an easy way to read an entire Access file (.mdb) into...

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

关键点:

我们问的是JET,而不是ACCESS。

Jet是作为Access的默认数据存储(并在其中存储Access自己的对象)提供的数据库引擎。但是"访问"的意义远不止数据表。

每当我们问一个问题并使Access和Jet混淆时,我们至少都会得到一些无用的答案。

而且我们会被我这样的人责骂,因为开发人员确实应该比模糊重要区别更了解。