2017-07-27 151 views
10

1.有没有人成功地将c#中的ODBC用于Sybase ASE?
2.或者更好,有没有人成功地将Sybase ASE与.NET Core一起使用?SYBASE ODBC .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驱动程序] [Adaptive Server Enterprise]过程iKYC_GetLookUp期望未提供参数@Type。

我试图使用类型有和没有@但每个产生相同的错误。

我没有尝试其他几种口味以及

  • command.CommandText = “{(?)调用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); 

由于之前在说,如果我做的参数为空,存储过程中,代码工作并且数据按预期返回,因此问题似乎在传递参数附近。

有没有人成功地将c#中的ODBC用于Sybase ASE? 有没有人成功使用Sybase ASE和.NET Core?

其他信息: 我正在使用Visual Studio 2017(v 15.2)。 Core 1.1并使用Sybase ASE 16.0 sp2。

回答

2

我们有一个类似的问题 - 我们想在AWS无服务器堆栈上使用ADO.NET - 这是仅限于.NET Core。我们提出了SAP请求支持.NET Core的问题,但没有得到任何回报。

我们与ODBC一去,不能让它有返回值在我们的存储过程的工作,忍辱负重,写我们自己的ADO.NET核心DbProvider为ASE 15-16。

它在.NET Core本身实现了TDS 5协议,在我们所有的测试用例中都优于SAP/Sybase实现。

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

有一个在维基文档运行单元,集成和基准测试自己。

大部分功能都已实现,欢迎提出请求和反馈。支持.NET 4.6和.NET Core 1.0,1.1和2.0。

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

+1

与SAP对Core的支持相同,零帮助。将看看你的实现! –

+1

非常感谢你分享这家提供商。 SAP/SYBASE是如此的痛苦。 – chris