我正在使用Visual Studio 2017(v 15.2(。 Core 1.1 并使用 Sybase ASE 16.0 sp2。 我还在Sybase SDK 16.0中使用Sybase.AdoNet4.AseClient.dll。
public IEnumerable<Countries> GetCountry()
{
var con = new AseConnection(ConnectionString); // No Errors
var cmd = con.CreateCommand(); // Error described below
return null;
}
CreateCommand()
在 IDE(波浪形红线(中生成以下内容:The type 'Db Connection is defined in an assembly that is not referenced. You must add a reference to assembly 'system.Data, Version=4.0.0.0, Culture=neutral, PublicKey=b77a5c561934e089'
我加载了每个包管理器
- install-package System.Data.Common -version 4.1.0,已加载但错误仍然存在。
- install-package System.Data.Common -version 4.3.0,已加载但错误仍然存在。
- 已尝试安装安装包 System.Data.Common -version 4.0.0,但收到错误(如下所示(:
- 已尝试安装安装包系统.数据.通用版本 4.0.0.0,但得到相同的错误(如下所示(:
安装包:包还原失败。回滚"iKYC.API"的包更改。 行:1 字符:16 + 安装包 <<<<System.Data.Common -version 4.0.0 + 类别信息:未指定:(:) [安装包],异常 + FullQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPacka 格威
我没有加载EntityFrame工作,因为这是Sybase。 Sybase 是我唯一可以使用的数据库。
我建立了一个项目来测试这个,发现,有趣的是,如果你的目标.net core 2.0
而不是1.1
它将构建。
但是,这会导致运行时错误System.MissingMethodException
,因为驱动程序正在寻找 .net core 中尚不存在的方法(和命名空间?
原因是Sybase.AdoNet4.AseClient.dll
针对的是.net framework 4,而不是.net core。它甚至在文件名(AdoNet4
(中暗示了这一点。
目前,此驱动程序似乎与.net核心不兼容。也许有一天,当缺少的方法被移植到 .net 核心时......它可能有效?
幸运的是,有几种选择:
- 使用
System.Data.Odbc
命名空间/包。System.Data.Odbc
目前处于预发布阶段,希望针对.net core 2.0+
.如果你被拴在.net core 1.1
,可能不适合你。- 就个人而言,我对
System.Data.Odbc
包搞砸了,虽然它适用于简单的东西,但我遇到了一些问题。特别是,似乎没有任何方法可以从工作的存储过程中获取返回值,并且缺乏对命名参数的支持(我认为这是ODBC
的事情(,使其难以使用。
- 就个人而言,我对
- 使用
AdoNetCore.AseClient
命名空间/包。在经历了很多挫折之后,我咬紧牙关,开发了一个针对.net core 1.0
、1.1
、2.0
和.net framework 4.6
的ADO.NET
驱动程序。如果你想查看来源/文档并确定它是否适合你,它可以在github上找到。- 要使用此驱动程序,只需引用软件包并将
using Sybase.Data.AseClient;
替换为using AdoNetCore.AseClient;
。
- 要使用此驱动程序,只需引用软件包并将