asp.net - SYBASE ODBC .Net 核心

标签 asp.net asp.net-core odbc sap-ase

1. 有没有人成功使用ODBC从c#到Sybase ASE?
2. 或者更好,有没有人成功地将 Sybase ASE 与 .NET Core 一起使用?

我正在使用 .NET Core 1.1 并且当前的 Sybase.AdoNet4.AseClient.dll 不起作用,所以我正在尝试使用 ODBC。我尝试使用两个 ODBC 包:

  • Mono.Data.OdbcCore (NuGet)
  • MSA.Net.Core.ODBC (NuGet)

  • 两者都可以很好地处理内联查询,并且都可以很好地调用没有参数的 Sybase 存储过程,但都具有 完全相同 尝试将参数发送到需要参数的 sp 时出错。

    这是一个片段:
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "XX_GetLookUp";
    command.Parameters.Add("@Type", OdbcType.VarChar).Value = "ACC";
    using (var reader = command.ExecuteReader()) {
        ...
    }
    

    我在 command.ExecuteReader() 期间不断收到以下错误:
    System.Data.Odbc.OdbcException: 'ERROR [ZZZZZ] [SAP][ASE ODBC Driver][Adaptive Server Enterprise]Procedure iKYC_GetLookUp 需要参数 @Type,但未提供。

    我尝试使用带和不带 @ 的 Type,但每个都会产生相同的错误。

    我也尝试了其他几种口味 :
  • command.CommandText = "{调用 dbo.iKYC_GetLookUp(?)}";
  • command.CommandText = "{调用 dbo.iKYC_GetLookUp}";
  • command.CommandText = "{dbo.iKYC_GetLookUp(?)}";
  • command.CommandText = "dbo.iKYC_GetLookUp(?)";
  • command.CommandText = "dbo.iKYC_GetLookUp ?";

  • 以上每个生成: System.Runtime.InteropServices.SEHException: 'External component has throw an exception。'

    我还尝试单独构建参数对象,但没有运气(同样的错误,缺少@Type):
    OdbcParameter p = new OdbcParameter();
    p.ParameterName = "@Type";
    p.DbType = DbType.AnsiString;
    p.Direction = ParameterDirection.InputOutput;
    p.Value = "ACC";
    cmd.Parameters.Add(p);
    

    如前所述,如果我将参数设置为 null,则在存储过程中,代码将正常工作并且数据按预期返回,所以问题似乎与正在传递的参数有关 .

    有没有人成功地使用从 c# 到 Sybase ASE 的 ODBC?
    有没有人成功地将 Sybase ASE 与 .NET Core 一起使用?


    附加信息:
    我正在使用 Visual Studio 2017 (v 15.2)。核心 1.1 并使用 Sybase ASE 16.0 sp2。

    最佳答案

    我们遇到了类似的问题——我们想在 AWS Serverless 堆栈上使用 ADO.NET——它只是 .NET Core。我们提出了 SAP 请求支持 .NET Core 的问题,但没有得到任何回复。

    我们尝试了 ODBC,但无法让它处理我们存储过程的返回值,于是硬着头皮为 ASE 15-16 编写了我们自己的 ADO.NET Core DbProvider。

    它在 .NET Core 的底层实现了 TDS 5 协议(protocol),并且在我们所有的测试用例中都优于 SAP/Sybase 实现。

    https://github.com/DataAction/AdoNetCore.AseClient

    wiki 上有文档可以为您自己运行单元、集成和基准测试。

    大多数功能都已实现,欢迎请求和反馈。支持 .NET 4.6 和 .NET Core 1.0、1.1、2.0 和 2.1。

    我们使用 AWS Lambda 和 .NET Core 2.0 进行这项工作。

    关于asp.net - SYBASE ODBC .Net 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339318/

    相关文章:

    c# - 如何在更改数据库后保存数据集?

    c++ - 未加载 Qt ODBC 驱动程序

    javascript - 复选框未在 knockout 中被选中

    unit-testing - 我应该如何在 .NET Core 1.1 或更高版本下使用 Mocking 和 Fakes?

    c# - MSBUILD : error MSB1003: Specify a project or solution file

    asp.net-core - 如何停止自托管 Kestrel 应用程序?

    php - PDO 返回错误 "could not find driver",具有已知的工作 DSN

    c# - 调用 WCF Web 服务时出错

    sql - ASP.NET 将重复结果加入一个并对其他字段求和

    ASP.NET MVC - 使用模型中的 bool 值禁用 Html Helper 控件