关于调用存储过程返回参数的问题。

vikingleo 2014-08-22 10:26:12
public static DataSet RunProcedurePage(string storedProcName, IDataParameter[] parameters, string tableName, out int recordCount, out int pageCount)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.Fill(dataSet, tableName);

recordCount = (int)sqlDA.SelectCommand.Parameters["@RecordCount"].Value;
pageCount = (int)sqlDA.SelectCommand.Parameters["@PageCount"].Value;
string xx = sqlDA.SelectCommand.Parameters["@str"].Value.ToString();
connection.Close();
return dataSet;
}
}

用这种方法 recordCount =2,pageCount =2 ,xx =output

直接 SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@Tables", SqlDbType.VarChar));
command.Parameters[0].Value = "FileList"; 省略。。。。。
SqlDataAdapter sqlDA = new SqlDataAdapter(command);

sqlDA.Fill(dataSet, tableName);

recordCount = (int)command.Parameters["@RecordCount"].Value;
pageCount = (int)command.Parameters["@PageCount"].Value;
string xx = command.Parameters["@str"].Value.ToString();
这样返回的值就是正常的 。。。。。。就是传入parameters 就不行 。直接添加 parameters就得到正确的返回值

传入的parameters 跟直接写的是一模一样的。 两者dataSet 都有数据返回而且数据是一致的。就是第一个得不到返回参数。求解
...全文
139 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
g改成 SqlParameter[] parameters) 就可以了
qqm05 2014-08-22
  • 打赏
  • 举报
回复

参数定义的时候,没有指明是输出参数吧
vikingleo 2014-08-22
  • 打赏
  • 举报
回复
引用 2 楼 wangjia1991 的回复:
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); 在这里,你确定存储过程与参数相关联了吗?问题就在这,你在仔细看一看
就是你的这种写法。 DataSet 都有数据。难道还没关联?
wangjia1991 2014-08-22
  • 打赏
  • 举报
回复
BuildQueryCommand(SqlConnection con,string storedProcName, SqlParameter[] parameters) { SqlCommand cmd = new SqlCommand(); if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = storedProcName; cmd.CommandType = CommandType.StoredProcedure;//cmdType; if (cmdParms != null) { foreach (SqlParameter parameter in cmdParms) { if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } cmd.Parameters.Add(parameter); } } } 这个是根据你的修改的,具体的你在看一下。
wangjia1991 2014-08-22
  • 打赏
  • 举报
回复
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); 在这里,你确定存储过程与参数相关联了吗?问题就在这,你在仔细看一看
wangnaisheng 2014-08-22
  • 打赏
  • 举报
回复

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧