【发布时间】:2018-01-02 12:08:50
【问题描述】:
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 时,两者都有 same exact 错误.
这是一个sn-p:
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 = "{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: '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。
【问题讨论】:
标签: asp.net asp.net-core odbc sap-ase