Невозможно отправить нулевой параметр в хранимую процедуру Sybase с помощью собственного клиента ADO .Net ASE

У меня возникает ошибка, когда я пытаюсь вызвать хранимую процедуру Sybase с нулевым параметром.

Я написал песочницу (см. код ниже)

Когда я запускаю код, я получаю исключение «Неподдерживаемый тип параметра». Единственный способ работы кода — это удаление параметра null (который по умолчанию равен null BTW), но для меня это не вариант, потому что код содержится в загроможденном ORM.

Я использую Sybase.AdoNet2.AseClient версии 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

person Bernabé Panarello    schedule 15.11.2013    source источник
comment
Код SP выглядит правильно - infocenter.sybase.com/help/index.jsp?topic=/   -  person Michael Gardner    schedule 16.11.2013
comment
Да, на самом деле, если выполнить процедуру из клиентской программы, такой как ASE Server Client, я не получаю никаких ошибок. Я забыл упомянуть, что обнаружил ту же проблему с параметризованными запросами. Может ли это быть проблемой клиентской библиотеки, которую я использую?   -  person Bernabé Panarello    schedule 18.11.2013


Ответы (1)


Да, это может быть проблема с драйвером, попробуйте set ansinull off после подключения. Мы столкнулись с аналогичной проблемой в delphi/sybase, я решил ее, используя приведенный ниже код.

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