c#调用存储过程不能取到返回值问题
/// <summary>
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name= "connection "> 数据库连接 </param>
/// <param name= "storedProcName "> 存储过程名 </param>
/// <param name= "parameters "> 存储过程参数 </param>
/// <returns> SqlCommand </returns>
private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
command.Parameters.Add(parameter);
}
}
}
return command;
}
/// <summary>
/// 执行存储过程 (使用该方法切记要手工关闭SqlDataReader和连接)
/// </summary>
/// <param name= "storedProcName "> 存储过程名 </param>
/// <param name= "parameters "> 存储过程参数 </param>
/// <returns> SqlDataReader </returns>
public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlDataReader returnReader;
connection.Open();
SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
command.CommandType = CommandType.StoredProcedure;
returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
//Connection.Close(); 不能在此关闭,否则,返回的对象将无法使用
return returnReader;
}
public SqlDataReader GetDividePageList(int __PageIndex,int __PageSize,string __strFields,string __TableName,string __ID,string __strWhere,string __OrderSort,ref int __RecordCount,ref int __PageCount)
{
SqlDataReader dr = null;
SqlParameter[] parameters = {
new SqlParameter( "@PageIndex ", SqlDbType.Int,4),
new SqlParameter( "@PageSize ", SqlDbType.Int,4),
new SqlParameter( "@strFields ", SqlDbType.VarChar,3000),
new SqlParameter( "@TableName ", SqlDbType.VarChar,500),
new SqlParameter( "@ID ", SqlDbType.VarChar,100),
new SqlParameter( "@strWhere ", SqlDbType.VarChar,3000),
new SqlParameter( "@OrderSort ", SqlDbType.VarChar,200),
new SqlParameter( "@RecordCount ", SqlDbType.Int,4),
new SqlParameter( "@PageCount ", SqlDbType.Int,4)};
parameters[0].Value = __PageIndex;
parameters[1].Value = __PageSize;
parameters[2].Value = __strFields;
parameters[3].Value = __TableName;
parameters[4].Value = __ID;
parameters[5].Value = __strWhere;
parameters[6].Value = __OrderSort;
parameters[7].Direction = ParameterDirection.Output;
parameters[8].Direction = ParameterDirection.Output;
dr = DbHelperSQL.RunProcedure( "SP_Page_GetPageData ", parameters);
__RecordCount = Convert.ToInt32(parameters[7].Value); 这儿的返回值为null
__PageCount = Convert.ToInt32(parameters[8].Value); 这儿的返回值为null
return dr;
}
在VS2003里可以得到返回值,在VS2005里执行相同代码不能得到返回值。
什么原因得不到存储过程返回值?
[解决办法]
是得不到的,你关闭了连接就能得到了