0

我有一个像这样的 Sybase 存储过程签名:

CREATE PROCEDURE dbo.spGui_AddENtity (@entity varchar(10), @category varchar(100),
                                              @debug smallint = 0,
                                              @retval smallint output, @errmsg varchar(255) output)

我正在尝试在 C# 中执行它,但它抱怨缺少 retval 参数。你知道为什么吗?想不通,我已经尝试了很多东西...

        // Adding also extra output params and debug one
        AseParameter extraParam = command.CreateParameter();
        extraParam.ParameterName = "@retval";
        extraParam.Direction = ParameterDirection.InputOutput;
        extraParam.AseDbType = AseDbType.SmallInt;
        extraParam.Value = 0;
        command.Parameters.Add(extraParam);

        extraParam.ParameterName = "@errmsg";
        extraParam.Direction = ParameterDirection.InputOutput;
        extraParam.AseDbType = AseDbType.NChar;
        extraParam.Value = "null";
        command.Parameters.Add(extraParam);

        // Finally executing the query`
        try
        {
            var retval = command.ExecuteNonQuery();

日志:

2013-09-19T16:51:31.293297 [INFO] {线程:UI} 参数 - 名称:@retval,值:0,DbType:Int16,AseDbType:SmallInt,方向:InputOutput 2013-09-19T16:51:31.293297 [INFO ] {线程:UI} 参数 - 名称:@errmsg,值:null,DbType:AnsiStringFixedLength,AseDbType:NChar,方向:InputOutput 2013-09-19T16:51:31.324555 [错误] {线程:UI} 过程 spGui_AddNewRegularName 需要参数 @ retvals,未提供。在 Sybase.Data.AseClient.AseCommand.CheckResult(Int32 res) 在 Sybase.Data.AseClient.AseCommand.Execute() 在 Sybase.Data.AseClient.AseCommand.ExecuteNonQuery()

谢谢你!

4

1 回答 1

0

问题是傻瓜的 C# 问题...必须每次都创建参数而不是使用前一个参数,即放在每个块的开头:

AseParameter extraParam = command.CreateParameter();

另外,另一个问题是我需要将方向设置为:

extraParam.Direction = ParameterDirection.Output;
于 2013-09-20T05:11:56.577 回答