VS2022:ODBC 驱动程序管理器错误:未找到数据源名称且未指定默认驱动程序

问题描述 投票:0回答:1

我在 VS2022 中创建了一个简单的项目,并创建了一个表单,该表单只是尝试打开 MS Access 数据库以从其中一个表中检索数据。 这是代码:

private void SurveyYearsForm_Load(object sender, EventArgs e)
{
    string connectionString = @Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\....\watch.accdb;

    using (OdbcConnection connection = new OdbcConnection(connectionString))
    {
       connection. Open();
       // Do work here.
    }
}

连接失败。 Open() 时出现异常 “System.Data.Odbc.OdbcException:'错误 [IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序'”

我已经创建了一个数据源,在服务器资源管理器中它成功创建了一个连接,我可以从任何表中检索数据。因此,我转到连接的“连接字符串”属性,并将值复制到上面的代码中,但这会生成错误,因此代码必须执行与 VS IDE 略有不同的操作。

MS Access 数据库是使用 Microsoft® Access® 2021 MSO(版本 2401 Build 16.0.17231.20194)64 位创建的。

我查看了 ODBC 数据源管理器(64 位),其中包含 ACEODBC.DLL 版本 16.00.17231.20036 的条目,因此版本号有所不同,但在本例中是这样的材料吗?

我猜某些组件安装不正确或丢失,但 IDE 工作很奇怪(至少对我来说)。

如有任何帮助,我们将不胜感激!

c# ms-access odbc visual-studio-2022 ace
1个回答
0
投票

好的,首先是项目构建为 x32 位或 x64 位的问题。

由于 Access 数据引擎将是 x32 位(在大多数情况下),因此您必须强制项目构建与 Access 数据引擎的给定位大小相匹配。

就是这样的设置:

因此,您的项目位大小构建必须与您安装的 Access 数据引擎位大小相匹配。请记住,vs2022 是 VS 的第一个 x64 位版本。因此,如果您使用任何 CPU 并按 f5,那么您的项目将作为进程内 x64 位进程运行。在 VS 的早期版本中,使用任何 CPU 按 F5 都会生成 x32 位运行版本的软件。

如上所述,您可以自由使用 ODBC 提供程序或 oleDB 提供程序。大多数人会建议在使用 Access 数据库时使用 oleDB 提供程序,并且您确实对某些 Access 数据库功能有更好的支持。

但是,ODBC 也是一个不错的选择。

因此,下一步是为整个项目创建一个连接字符串(这样您就不必在代码中一遍又一遍地输入它)。

我还应该注意,虽然您可以使用 VS 连接向导来构建有效的连接字符串,但在运行 Access x32 位时,测试连接按钮将永远不会在 vs2022 中工作。对于 vs2022 之前的版本,此用例是相反的。

因此,在 vs2022 中,如果您运行 Access x64,则测试连接按钮将起作用。

如果您运行的是 Access x32,则测试连接将无法工作,但是,当您运行代码时,此类连接应该可以正常工作(假设您强制项目以 x32 位运行,并且不使用任何 CPU) .

因此,我将推荐 oleDB 提供程序,原因是连接构建器比 ODBC 工作得更好。如前所述,ODBC 在这里有很多优点,并且仍然是一个不错的选择,因为如前所述,您可以将该连接字符串更改为 SQL Server、MySQL 或其他任何内容,并且不必更改数据库提供程序。

那么,让我们设置一个到 Access 数据库的 oleDB 连接。

因此:

请注意,您非常想检查正在使用的数据库引擎版本(您想使用 ACE,因为打开 accDB 文件需要它,而且 ACE 有可用的 x64 位版本,而 JET 没有) .

因此,在构建连接时,请 100%、200%、300% 确保您设置或查看此处选择的数据引擎(ACE 或 JET)。

因此,完成上述操作后点击高级选项卡,并检查您是否选择了 ACE:

现在,为了进行测试,假设一个空白的新表单,放入一个按钮,放入一个 DataGridView。

因此,现在我们的代码变成了这样:

    private void button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();

        string strSQL =
            @"SELECT ID, FirstName, LastName, City, HotelName, Description
            FROM tblHotelsA
            ORDER BY HotelName";

        using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB))
        {
            using (OleDbCommand cmd = new OleDbCommand(strSQL, conn))
            {
                conn.Open();
                dt.Load(cmd.ExecuteReader());
            }
        }
        dataGridView1.DataSource = dt;
    }

结果是这样的:

所以,总结一下:

访问 x32 数据引擎的测试连接在 vs2022 中永远不会工作,但按 F5 运行项目应该可以工作。这假设您将任何 CPU 设置为 x32 位 (x86)。

但是,您也可以考虑安装 Access x64 位,然后强制您的项目为 x64 位。额外的好处是测试连接按钮可以在 vs2022 中使用,但我不能说这是一个很大的问题。

如果您的目标是 ODBC,那么我可以发布 ODBC 的有效 Access 连接。

© www.soinside.com 2019 - 2024. All rights reserved.