SYBASE ODBC .Net CORE

Mon*_*Man 10 asp.net odbc sybase-ase asp.net-core

1.有没有人成功地将c#中的ODBC用于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()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我在命令期间不断收到以下错误.ExecuteReader(): System.Data.Odbc.OdbcException:'ERROR [ZZZZZ] [SAP] [ASE ODBC驱动程序] [Adaptive Server Enterprise]过程iKYC_GetLookUp需要参数@Type,这不是提供.

我试图使用带有和没有@的Type但每个都生成相同的错误.

我也尝试了其他几种口味:

  • command.CommandText ="{call dbo.iKYC_GetLookUp(?)}";
  • command.CommandText ="{call dbo.iKYC_GetLookUp}";
  • command.CommandText ="{dbo.iKYC_GetLookUp(?)}";
  • command.CommandText ="dbo.iKYC_GetLookUp(?)";
  • command.CommandText ="dbo.iKYC_GetLookUp?";

上面每个生成的位置:System.Runtime.InteropServices.SEHException:'外部组件抛出异常.'

我也尝试将参数对象分开构建,没有运气(同样的错误,缺少@Type):

OdbcParameter p = new OdbcParameter();
p.ParameterName = "@Type";
p.DbType = DbType.AnsiString;
p.Direction = ParameterDirection.InputOutput;
p.Value = "ACC";
cmd.Parameters.Add(p);
Run Code Online (Sandbox Code Playgroud)

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

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

其他信息:我使用的是Visual Studio 2017(v 15.2).核心1.1并使用Sybase ASE 16.0 sp2.

she*_*tie 6

我们遇到了类似的问题 - 我们希望在 AWS 无服务器堆栈上使用 ADO.NET - 仅适用于 .NET Core。我们向 SAP 提出了问题,请求支持 .NET Core,但没有得到任何回复。

我们尝试了 ODBC,但无法让它与我们的存储过程的返回值一起工作,所以硬着头皮为 ASE 15-16 编写了我们自己的 ADO.NET Core DbProvider。

它在 .NET Core 中本地实现了 TDS 5 协议,并且在我们所有的测试用例中都优于 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 来完成这项工作。