1

我创建了一个存储过程来从动态 sql 中获取返回值。我得到以下异常:

String[1]:Size 属性的大小为 0 无效。

我的过程:

CREATE proc [dbo].[Review_Get_PrePopValue](@sqlQuery nvarchar(500), @display nvarchar(200) OUTPUT)
as

EXEC sp_executesql @sqlQuery,   
    @display OUTPUT 

我的代码:

public string GetAnswerValue(string contentSQL, string parameter, string parameterValue)
{
    string sqlstatement = contentSQL.Replace(parameter, parameterValue);

    using (var conn = new SqlConnection(_connectionString))
    {
        string prePopValue;
        SqlCommand comm = new SqlCommand();
        comm.Connection = conn;
        comm.CommandType = CommandType.StoredProcedure;
        comm.CommandText = "Review_Get_PrePopValue";

        comm.Parameters.Add(new SqlParameter("@sqlQuery", SqlDbType.NVarChar)).Value = sqlstatement; 
        comm.Parameters.Add(new SqlParameter
        {
            Direction = ParameterDirection.Output,
            ParameterName = "@display",
            SqlDbType = SqlDbType.NVarChar
        });

        conn.Open();
        comm.ExecuteNonQuery();

        prePopValue = comm.Parameters["@display"].Value.ToString();
        return prePopValue;
    }
}

我的 sql 字符串:

Select @display = Grant_Number From GMIS_Grants where grant_id=1
4

2 回答 2

1

方向 = ParameterDirection.Output,ParameterName = "@display",大小 = 200,SqlDbType = SqlDbType.NVarChar

需要设置 nvarchar 的大小

于 2013-03-14T03:41:15.143 回答
0

来自 MSDN

对于双向和输出参数以及返回值,您必须设置 Size 的值。

此外,将其添加到您的 SP 的末尾。

SELECT @display;
于 2013-03-03T02:32:32.487 回答