【发布时间】:2013-03-03 02:21:11
【问题描述】:
我创建了一个存储过程来从动态 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
【问题讨论】:
-
这是您在此处创建的一条非常有趣的 SQL 注入路径。
标签: sql-server-2008 stored-procedures ado.net sp-executesql