如何在 Visual Studio 2019 和 .NET Core 3.0 中使用 ODBC 连接?

Posted

技术标签:

【中文标题】如何在 Visual Studio 2019 和 .NET Core 3.0 中使用 ODBC 连接?【英文标题】:How can I use ODBC connections with Visual Studio 2019 and .NET Core 3.0? 【发布时间】:2019-09-30 15:25:25 【问题描述】:

我使用 Visual Studio Community 2019 16.3.1。

我想在 .NET Core 3.0 项目中使用 ODBC 连接(示例适用于 .NET Framework 4.x):

using System.Data.Odbc;

using (OdbcConnection connection = new OdbcConnection(odbcConnectionString))

    using (OdbcCommand command =  new OdbcCommand(sql, connection)) 
    
        command.CommandType = System.Data.CommandType.Text;
        command.CommandTimeout = 0;
        command.Connection.Open();
        string value = Convert.ToString(command.ExecuteScalar());
        return value;
    

我收到错误消息:

错误 CS1069 在命名空间“System.Data.Odbc”中找不到类型名称“OdbcConnection”。此类型已转发到程序集 'System.Data.Odbc, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 考虑添加对该程序集的引用。

如果我尝试对 OleDbConnection 类进行相同操作,则会收到类似 OdbcCommand 类的消息和类似的错误。

在 Microsoft 文档中,OdbcConnection 类在 System.Data.Odbc 中被描述为 .NET Core 3.0 的一部分。

为什么我必须链接到旧版本?

我怎样才能提出要求的参考?

附录 我发现 .NET Core 3.0 中的 System.Data.Odbc 包只包含两个类(OdbcPermission 和 OdbcPermissionAttribute)。 .NET Framework 4.8 的 System.Data.Odbc 中包含的所有其他类都丢失了。

【问题讨论】:

必须在控制面板中定义 ODBC:管理工具:ODBC 数据源 问题与Windows的ODBC配置无关。问题是编译器错误。根据 Microsoft 文档,编译器不知道它应该知道的类。 我可能是.proj文件中的版本。创建一个新项目并添加 System.Data.ODBC。然后编译并用记事本打开.proj。检查版本,看看它是否与非工作项目相同。然后编辑非工作项目。 我没有 .proj 文件,只有一个 .sln 文件。我在其中找不到任何与 ODBC 相关的版本号。另一方面,非工作项目是一个新项目,它不是从较旧的 Visual C# 版本导入的。仅从旧项目中添加了 .c# 文件。 如果您在创建项目后升级了 Net,您可能会遇到问题。是否使用 System.Data.ODBC 编译新项目? 【参考方案1】:

ODBC 和 OleDb 函数包含在 Microsoft.Windows.Compatibility Pack 中。如果您在 NuGet 的帮助下下载此文件,则会找到这些类(针对 .NET Core 3.1 进行了测试)。

包可以在这里下载: https://www.nuget.org/packages/Microsoft.Windows.Compatibility

【讨论】:

+1 这就是我的问题。 using System.Data.Odbcvar conn = new OdbcConnection(); 后来抛出错误,直到我通过包管理器安装了包。

以上是关于如何在 Visual Studio 2019 和 .NET Core 3.0 中使用 ODBC 连接?的主要内容,如果未能解决你的问题,请参考以下文章