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

时间:2017-07-21 21:02:56

标签: asp.net-core sybase sybase-ase

我正在使用Visual Studio 2017(第15.2节)。核心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'

我按PackageManger加载

  • 安装包System.Data.Common -version 4.1.0 ,加载但错误仍然存​​在。
  • install-package System.Data.Common -version 4.3.0 ,加载但错误仍然存​​在。
  • 尝试安装 install-package System.Data.Common -version 4.0.0 , 但得到一个错误(如下所示):
  • 尝试安装 install-package System.Data.Common -version 4.0.0.0 ,但上面的错误相同(如下所示):

安装包:包恢复失败。回滚“iKYC.API&#39;”的包裹更改。 在行:1字符:16 + install-package&lt;&lt;&lt;&lt; System.Data.Common -version 4.0.0     + CategoryInfo:NotSpecified:(:) [Install-Package],Exception     + FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPacka    geCommand

我还没有加载EntityFrame工作,因为这是Sybase。 Sybase是我唯一可以使用的数据库。

1 个答案:

答案 0 :(得分:2)

我设置了一个项目来测试这个,并且发现,如果你有目标的话,很有趣  <{1}}而不是.net core 2.0它将构建。

然而,这会导致运行时错误1.1,因为驱动程序正在寻找.net核心中尚不存在的方法(和命名空间?)。

原因是System.MissingMethodException目标.net框架4,而不是.net核心。它甚至在文件名(Sybase.AdoNet4.AseClient.dll)中暗示它。

目前看起来这个驱动程序与.net核心不兼容。也许有一天,当缺少的方法被移植到.net核心......它可能有用吗?

幸运的是,有几种选择:

  1. 使用System.Data.Odbc命名空间/包。 AdoNet4目前处于预发布状态,目标是System.Data.Odbc。如果你被链接到.net core 2.0+,可能不适合你。
    • 就个人而言,我已经弄乱了.net core 1.1包,虽然它使用简单的东西,但我遇到了一些问题。特别是,似乎没有任何方法可以从存储过程中获取返回值,并且缺少对命名参数的支持(我认为是System.Data.Odbc),这使得它很难使用。
  2. 使用AdoNetCore.AseClient命名空间/包。经过很多挫折之后,我咬紧牙关并开始使用ODBC驱动程序,该驱动程序定位ADO.NET.net core 1.01.12.0。如果您想查看来源/文档并确定它是否适合您,那就是available on github
    • 要使用此驱动程序,只需引用该包并将.net framework 4.6替换为using Sybase.Data.AseClient;