2013-11-15 12 views
2

У меня возникла ошибка и ошибка при попытке вызвать хранимую процедуру Sybase, которая указывает нулевой параметр.Невозможно отправить параметр null в хранимую процедуру Sybase с использованием собственного ADO-клиента .Net ASE

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

Когда я запускаю код, я получаю «неподдерживаемый тип параметра» исключение. Единственный способ, которым работает код: удалить нулевой параметр (который по умолчанию имеет значение 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 ([email protected]) 

IF @@ERROR <> 0 
    RETURN 1 
RETURN 0 
+0

SP код выглядит правильно - http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32300_1251/html/sqlug/sqlug605.htm –

+0

Да, как вопрос факт, если выполнить процедуру из клиентской программы, такой как «Клиент сервера ASE», я не получаю никаких ошибок. Я забыл упомянуть, что я нашел ту же проблему с параметризованными запросами. Может быть, проблема в клиентской библиотеке, которую я использую? –

ответ

1

Да это может быть возможно вопрос водителя, попытайтесь set ansinull off после connecting.We столкнулись с аналогичной проблемой в DELPHI/Sybase, я resloved выданная используя ниже код.

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