Sybase ASE 16x 和 .NET Core 1.1 进行 SP 调用



我正在使用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 核心时......它可能有效?

幸运的是,有几种选择:

  1. 使用System.Data.Odbc命名空间/包。System.Data.Odbc目前处于预发布阶段,希望针对.net core 2.0+.如果你被拴在.net core 1.1,可能不适合你。
    • 就个人而言,我对System.Data.Odbc包搞砸了,虽然它适用于简单的东西,但我遇到了一些问题。特别是,似乎没有任何方法可以从工作的存储过程中获取返回值,并且缺乏对命名参数的支持(我认为这是ODBC的事情(,使其难以使用。
  2. 使用AdoNetCore.AseClient命名空间/包。在经历了很多挫折之后,我咬紧牙关,开发了一个针对.net core 1.01.12.0.net framework 4.6ADO.NET驱动程序。如果你想查看来源/文档并确定它是否适合你,它可以在github上找到。
    • 要使用此驱动程序,只需引用软件包并将using Sybase.Data.AseClient;替换为using AdoNetCore.AseClient;

最新更新