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

问题描述

publicstaticDataSetRunProcedurePage(stringstoredProcName,IDataParameter[]parameters,stringtableName,outintrecordCount,outintpageCount){using(SqlConnectionconnection=newSqlConnection(connectionString)){DataSetdataSet=newDataSet();connection.Open();SqlDataAdaptersqlDA=newSqlDataAdapter();sqlDA.SelectCommand=BuildQueryCommand(connection,storedProcName,parameters);sqlDA.Fill(dataSet,tableName);recordCount=(int)sqlDA.SelectCommand.Parameters["@RecordCount"].Value;pageCount=(int)sqlDA.SelectCommand.Parameters["@PageCount"].Value;stringxx=sqlDA.SelectCommand.Parameters["@str"].Value.ToString();connection.Close();returndataSet;}}用这种方法recordCount=2,pageCount=2,xx=output直接SqlCommandcommand=newSqlCommand(storedProcName,connection);command.CommandType=CommandType.StoredProcedure;command.Parameters.Add(newSqlParameter("@Tables",SqlDbType.VarChar));command.Parameters[0].Value="FileList";省略。。。。。SqlDataAdaptersqlDA=newSqlDataAdapter(command);sqlDA.Fill(dataSet,tableName);recordCount=(int)command.Parameters["@RecordCount"].Value;pageCount=(int)command.Parameters["@PageCount"].Value;stringxx=command.Parameters["@str"].Value.ToString();这样返回的值就是正常的。。。。。。就是传入parameters就不行。直接添加parameters就得到正确的返回值传入的parameters跟直接写的是一模一样的。两者dataSet都有数据返回而且数据是一致的。就是第一个得不到返回参数。求解

解决方案

本帖最后由 vikingleo 于 2014-08-22 10:34:27 编辑
解决方案二:

解决方案三:
sqlDA.SelectCommand=BuildQueryCommand(connection,storedProcName,parameters);在这里,你确定存储过程与参数相关联了吗?问题就在这,你在仔细看一看
解决方案四:
BuildQueryCommand(SqlConnectioncon,stringstoredProcName,SqlParameter[]parameters){SqlCommandcmd=newSqlCommand();if(conn.State!=ConnectionState.Open)conn.Open();cmd.Connection=conn;cmd.CommandText=storedProcName;cmd.CommandType=CommandType.StoredProcedure;//cmdType;if(cmdParms!=null){foreach(SqlParameterparameterincmdParms){if((parameter.Direction==ParameterDirection.InputOutput||parameter.Direction==ParameterDirection.Input)&&(parameter.Value==null)){parameter.Value=DBNull.Value;}cmd.Parameters.Add(parameter);}}}这个是根据你的修改的,具体的你在看一下。
解决方案五:
引用2楼wangjia1991的回复:

sqlDA.SelectCommand=BuildQueryCommand(connection,storedProcName,parameters);在这里,你确定存储过程与参数相关联了吗?问题就在这,你在仔细看一看

就是你的这种写法。DataSet都有数据。难道还没关联?
解决方案六:
参数定义的时候,没有指明是输出参数吧

解决方案七:
g改成SqlParameter[]parameters)就可以了

时间: 2024-10-06 03:09:18

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

sql生成(c#调用存储过程返回数据表)代码的存储过程

GO /****** 对象: StoredProcedure [dbo].[pro_GenerateServiceFunction] 脚本日期: 08/04/2012 11:26:43 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pro_GenerateServiceFunction]') AND type in (N'P', N'PC')) DROP PROCEDURE [d

php调用存储过程返回结果集

php调用存储过程返回结果集,解决can't return a result set in the given context错误的方法需要php调用存储过程,返回一个结果集,发现很困难,找了半天,终于在老外的论坛上找到解决方案,这里本地化一下. 关键就是两点 1)define('CLIENT_MULTI_RESULTS', 131072); 2)$link = mysql_connect("127.0.0.1", "root", "",1,CL

关于ASP.NET 调用存储过程传参数的问题

问题描述 关于ASP.NET 调用存储过程传参数的问题 /// /// 执行存储过程 /// /// 存储过程名 /// 存储过程参数 /// SqlDataReader public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters) { SqlConnection connection = OpenSqlConnection(); SqlCommand command =

mybatis-Mybatis调用存储过程返回多个结果集

问题描述 Mybatis调用存储过程返回多个结果集 存储过程返回两个结果集(游标). CREATE?OR?REPLACE?FUNCTION?t_user_func(id?varchar(20)) ??RETURNS?SETOF?refcursor?AS $BODY$ Declare code?refcursor; result?refcursor; BEGIN????? ??--返回错误码 ??OPEN?code?FOR?select?1010?as?code; ??RETURN?NEXT?co

SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

   我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked Server), 调用存储过程过程时,参数不能为NULL值. 否则就会报下面错误提示: 对应的英文错误提示为: EXEC xxx.xxx.dbo.Usp_Test NULL,NULL,'ALL' Msg 7213, Level 16, State 1, Line 1 The attempt by

EF调用存储过程返回的结果集和过程执行的结果集不一致

问题描述 EF调用存储过程返回的结果集和直接在数据库里执行存储过程的结果不一样希望大家帮忙看一下. 解决方案 解决方案二:看下sql是否一致,参数传递有没有问题,是否是同一个数据库解决方案三:引用1楼苏小喵的回复: 看下sql是否一致,参数传递有没有问题,是否是同一个数据库 这些都没问题的呐!解决方案四:是修改前和修改后两个数据不一致吗?解决方案五:引用3楼JustinLiu27的回复: 是修改前和修改后两个数据不一致吗? 不是的,是在调用这个过程,返回的结果集,和在直接执行的结果不一致解决方案

PHP调用存储过程返回值不一致问题的解决方法分析_php技巧

本文实例讲述了PHP调用存储过程返回值不一致问题的解决方法.分享给大家供大家参考,具体如下: 今天遇一个同学聊存储过程返回值经常得到意外的值为null, 因为白天有事,晚上给做一个实验放在这里供有相应问题的同学查看一下. 存储过程: delimiter// createprocedureusp_s2(outpar1int) begin selectinet_ntoa(ip),portfromproxy_listlimit5; selectcount(*)intopar1fromproxy_lis

ASP调用存储过程返回了一个参数和一个记录集时出现ADODB.Recordset 错误 '800a0e78'

在测试服务器上给sql server2005 打上了sp3补丁,发现有一个调用存储过程的页面报错 ADODB.Recordset 错误 '800a0e78' 对象关闭时,不允许操作. 以为是sp3的缘故,查了好就都没有解决方法,无奈之下,又针对报错,google了一下,发现有一个类似的问题的解决办法就是,在存储过程中加入"set  nocount  on"这个语句解决的,查看了一下我的存储过程,没有类似返回记录的地方,就想是不是输出了其他什么东西,赶快检查,发现不知什么时候为了调试,有

Entity Framework 5.0 调用存储过程 返回值为什么是int类型

问题描述 用VS2012+EntityFramework5.0生成代码但是生成的存储过程返回值有问题为什么生成的存储过程返回值为int类型??存储过程中操作复杂最后返回几个字段值.publicvirtualintGetMenuByRID(Nullable<int>rID){varrIDParameter=rID.HasValue?newObjectParameter("RID",rID):newObjectParameter("RID",typeof(i