SqlHelper 3.0 执行ExecuteReader 不能得到output问题

lifeixie 2007-01-05 02:20:40
我程序用的数据库操作类都用的 SqlHelper 3.0

我存储过程 存入一个 output参数,用来返回查询的行数字,可是执行 ExecuteReader 后,在取值 参数为null.我把
Reader 对象关了,才能取到,服了,我关完在取还用output 做什么。请问如何 在 Reader对象没关 之前取到 output值,是个bug么还是本身不让你取。2.1好象可以!而且 用 ExecuteReader,执行插入后,可以取到!不用关闭 Reader


----------------------------------存储过程如下---------------------------
----------------------------------存储过程测试过没问题-------------------



CREATE PROCEDURE [dbo].[SelectInitCar]
@ShowType bit, @Rowss smallint output
AS

If @ShowType =1
Begin
select Car.CarID,Car.CarName,Car.CarSim,Car.LogTime,
OrienSet.Stake,OrienSet.MapStake,OrienSet.LonOrOffset,OrienSet.LatOrOffset
From Car JOIN OrienSet ON Car.CarID = OrienSet.CarID
select @Rowss = @@rowcount

End

Else
Begin
select Car.CarID,Car.CarName,Car.CarSim,Car.LogTime,
OrienSet.Stake,OrienSet.MapStake,OrienSet.LonOrOffset,OrienSet.LatOrOffset,
CarGroup.GroupID,CarGroup.GroupName
From CarGroup
LEFT JOIN Car ON CarGroup.GroupID = Car.GroupID
JOIN OrienSet ON Car.CarID = OrienSet.CarID
select @Rowss = @@rowcount
End
--------------------------------------------------------------------------------------------------------------------------------------------------

----------------------代码如下------------------------------------------------------------------------------------------------------------------
SqlParameter[] sps = new SqlParameter[2];
sps[0] = new SqlParameter("@ShowType", SqlDbType.Bit);
sps[0].Direction = ParameterDirection.Input;

sps[1] = new SqlParameter("@Rowss", SqlDbType.SmallInt);
sps[1].Direction = ParameterDirection.Output;

SqlDataReader dr = (SqlDataReader)Communal.Ahelper.ExecuteReader(Communal.SqlStr, CommandType.StoredProcedure, "SelectInitCar", sps);

//dr.Close();
string xxxx = Convert.ToString(sps[1].Value);
-------------------------------------------------------------------------

谁对sqlhelper3.0比较了解的,告诉我改那里也行!!请高手指教为什么dr开着的时候取值不行?怎么解决,谢谢



...全文
436 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifeixie 2007-01-16
  • 打赏
  • 举报
回复
亲切器
lifeixie 2007-01-16
  • 打赏
  • 举报
回复
ExecuteNonQuery???能渠道,我得读出来值啊,我不爱用dataset慢的要死.数据略多一点就不行.帮顶后还可以!
wengnet 2007-01-16
  • 打赏
  • 举报
回复
用ExecuteNonQuery方法呀
downmoon 2007-01-16
  • 打赏
  • 举报
回复
你的参数类型可能不对,这是我的例子,你试一下

/// <summary>
/// 增加 downmoon 返回一新增的AttachID
/// </summary>
/// <param name="m_Attachmemt"></param>
/// <returns></returns>

internal int AttachmemtInsertPre(SMS.Attachmemt.Framework.Components.Attachmemt m_Attachmemt)
{
int result=0;

AttachmemtInsert(m_Attachmemt);

SqlParameter[] p1=
{
Agronet.API.Framework.Data.SqlHelper.MakeParam("@AttachID",SqlDbType.Int, 4,System.Data.ParameterDirection.ReturnValue,m_Attachmemt.AttachID)
//注意类型为ReturnValue!!!!!!!!!

};

result=ReturnMaxPKID("CPP_SMS_getAttachMaxID",p1);
if(result<=0)
{
result=0;
}

return result;
//return DateHandleResult("SMS_AttachmemtInsert",p,false);

}

#region 返回主键 downmoon
internal protected static int ReturnMaxPKID(string commandText, SqlParameter[] p)
{

object result= Agronet.API.Framework.Data.SqlHelper.ExecuteScalar(ConnectionString,System.Data.CommandType.StoredProcedure,commandText);

return int.Parse(result.ToString());
//return Agronet.API.Framework.Data.SqlHelper.ExecuteNonQuery(ConnectionString,CommandType.StoredProcedure,commandText,p);

}

存储过程如下:

----CPP_SMS_getAttachMaxID 0
ALTER Procedure [dbo].[CPP_SMS_getAttachMaxID]
-- (
-- --@MaxID int output
-- ----@test int
-- )

as
--set @MaxID= IDENT_CURRENT('Attachmemt')
----exec sp_executesql
--print @MaxID

select IDENT_CURRENT('Attachmemt')
return





GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
hertcloud 2007-01-16
  • 打赏
  • 举报
回复
不管你是使用sqlhelper 还是自己
直接写 操作数据库的语句

都必须是在dr关闭以后才能获取 放回值
这个是机制问题
hertcloud 2007-01-16
  • 打赏
  • 举报
回复
返回值 必须是在
dr.close()以后 才可以获取的。。。
lifeixie 2007-01-08
  • 打赏
  • 举报
回复
强行顶!!
lifeixie 2007-01-05
  • 打赏
  • 举报
回复
ding

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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