2012-03-16 2 views
0
CREATE PROCEDURE [dbo].[proc1] 
(
    @tbl1 varchar(30), 
    @var2 varchar(7000) 
) 
AS 
BEGIN 
    DECLARE @sql VARCHAR(8000) 


    BEGIN 
     SET @sql = 'INSERT INTO ' + @tbl1 + '(column) VALUES (''' + @var2 + ''')' 

     EXEC (@sql) 

     RETURN CONVERT(int, NEXT_IDENTITY(@tbl1)) 
    END 
END 

C# Метод:Получение пустое значение из хранимой процедуры (SyBase)

//create connection 
using (AseConnection cn = new AseConnection(connectionString)) { 
    AseCommand cmd = new AseCommand(); 

    AseParameter[] paras = new AseParameter[]{ 
     new AseParameter("@tbl1", AseDbType.VarChar, 30), 
     new AseParameter("@var1", AseDbType.VarChar, 7000), 
     new AseParameter("@RetValue",AseDbType.Integer) }; 
    // Add all the parameters to command object 
    foreach(AseParameter p in paras) { 
     cmd.Parameters.Add(p); 
    } 

    //finally, execute the command. 
    return cmd.ExecuteNonQuery(); 
} 

Тем не менее, третий параметр всегда пуст. Если я выполняю процедуру непосредственно у клиента Sybase, это дает мне правильное значение. У кого-нибудь есть хорошее предложение, как решить эту проблему?

+0

Не могли бы вы показать нам код для добавления параметров в команде? –

ответ

0

Объявить третий параметр как

AseParameter retParam = new AseParameter("@RetValue",AseDbType.Integer); 
retParam.Direction = ParameterDirection.ReturnValue; 

Кроме того, выберите идентичность с

RETURN @@identity 
Смежные вопросы