无法使用 .Net ASE 本机 ADO 客户端将空参数发送到 Sybase 存储过程



当我尝试调用 Sybase 存储过程以执行空参数时,我遇到了错误。

我写了一个沙箱(见下面的代码)

当我运行代码时,出现"不支持的参数类型"异常。代码工作的唯一方法是删除 null 参数(默认为 null BTW),但这对我来说不是一个选项,因为代码包含在一个压缩的 ORM 中。

我正在使用Sybase.AdoNet2.AseClient v 1.15.346.0。 Sybase 数据库版本是 12.5.4如果你能帮助我,我会很高兴的。谢谢和问候,伯纳贝

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sybase.Data.AseClient;
namespace SybaseSPParamNulo
{
    class Program
    {
        static void Main(string[] args)
        {
            string cnxString = @"Data Source=192.168.0.8;Port=5000;Database=PiaSigna;Uid=sa;Pwd=123456;";
            Sybase.Data.AseClient.AseConnection cnx = new AseConnection(cnxString);
            AseCommand cmd = new AseCommand("sp_sectores_por_sucursal");
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            AseParameter p = new AseParameter("@suc", DBNull.Value );
            cmd.Parameters.Add(p);
            cnx.Open();
            cmd.Connection = cnx;
            cmd.ExecuteReader();
            cnx.Close();

        }
    }
} 

The following is the SP
CREATE procedure [dbo].[sp_sectores_por_sucursal]
@suc numeric(4)=NULL
AS 
select s.CODSEC,DESC_SEC from GYF_SECTORES s
join SUCURSAL_SECTORES ss on ss.CODSEC=s.CODSEC
where (NNSUCURSAL_ID=@suc)
IF @@ERROR <> 0 
   RETURN 1
RETURN 0

是的,可能是驱动程序问题,尝试在连接后set ansinull off。我们在 delphi/sybase 中遇到了类似的问题,我已经使用以下代码重新发布了。

procedure TForm.TestConnectionAfterConnect(Sender: TObject);
begin
   TestConnection.ExecSQL('set ansinull off',[]);
end;

最新更新