1. 有人成功地从c#使用ODBC连接Sybase ASE吗?
2. 或者更好的是,有人成功地在.NET Core中使用Sybase ASE吗?
我正在使用.NET Core 1.1,当前的Sybase.AdoNet4.AseClient.dll无法工作,所以我尝试使用ODBC。我已经尝试使用了两个ODBC包:
- Mono.Data.OdbcCore(NuGet)
- MSA.Net.Core.ODBC(NuGet)
两者都可以很好地执行行内查询,并且在不带参数的情况下调用存储过程时也能正常工作,但是当尝试发送必需的存储过程参数时,两者都会有完全相同的错误。
以下是示例代码:
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 expects parameter @Type, which was not supplied.
我尝试使用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 thrown 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#使用ODBC连接到Sybase ASE吗? 有人成功地将Sybase ASE与.NET Core一起使用吗?
附加信息: 我正在使用Visual Studio 2017(版本15.2)。Core 1.1并使用Sybase ASE 16.0 sp2。