主题:  找遍世界各大论坛都找不到答案的问题

Dreaming

职务:普通成员
等级:1
金币:10.0
发贴:1518
注册:2004/7/18 17:48:40
#12006/3/28 9:30:35
ASP.net 2.0中,如何用sqldatasource 或 objectdatasource如何获取到 数据库 存储过程返回的output/return 的值??

期待 蓝鲸 等高手解答或讨论。Thanks~



Dreaming

职务:普通成员
等级:1
金币:10.0
发贴:1518
注册:2004/7/18 17:48:40
#22006/3/28 13:39:11
PS.主要是output的问题,不用returnvalue怎么获得?



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
#32006/3/28 16:43:15
Dreaming在上个帖子中说
引用:
ASP.net 2.0中,如何用sqldatasource 或 objectdatasource如何获取到 数据库 存储过程返回的output/return 的值??

期待 蓝鲸 等高手解答或讨论。Thanks~


不好意思,由于现在租用服务器2.0的比较难找到,本人还没转到2.0上来开发
2.0现在在所知甚少,希望有2.0开发经验朋友来帮助


非常大鱼

Dreaming

职务:普通成员
等级:1
金币:10.0
发贴:1518
注册:2004/7/18 17:48:40
#42006/3/29 10:28:52
新誊网络(www.idcc.cn) 这个客服说他们支持2.0的(我不是在卖广告啊……)

暂时我用returnvalue能解决问题了,但还是想理解output的用法,希望知情者能指导一下



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
#52006/3/29 11:18:18
output是用参数输出的,一般存储过程用法比较多

下面是个例子

存储过程:
CREATE PROCEDURE sp_AccountRole_Create

@CategoryID int,
@RoleName nvarchar(10),
@Description nvarchar(50),
@RoleID int output
AS
    DECLARE @Count int

    SELECT @Count = Count(RoleID) FROM Account_Role WHERE
        RoleName = @RoleName

    IF @Count = 0

        INSERT INTO Account_Role
        (CategoryID, RoleName, Description) valueS
        (@CategoryID, @RoleName, @Description)

        SET @RoleID = @@IDENTITY

        RETURN 1

GO

建立数据记录的函数

        public int Create(RoleInfo role)
        {
            int rowsAffected = 0;
            SqlParameter[] parameters =
                {
                    new SqlParameter("@CategoryID", SqlDbType.Int, 4),
                    new SqlParameter("@RoleName", SqlDbType.NVarChar, 10),
                    new SqlParameter("@Description", SqlDbType.NVarChar, 50),
                    new SqlParameter("@RoleID", SqlDbType.Int, 4)
                };
            parameters[0].value = role.CategoryID;
            parameters[1].value = role.RoleName;
            parameters[2].value = role.Description;
            parameters[3].Direction = ParameterDirection.Output;
            try
            {
                RunCommand("sp_AccountRole_Create", parameters, out rowsAffected);
            }
            catch
            {
                throw ( new AppException("在建立角色时发生意外错误。") );
            }

            if (rowsAffected <= 0)
            {
                throw ( new AppException("已经存在名为" + role.RoleName + "的角色名称,请重新再选其它名称。") );
            }
            else
            {
                return (int)parameters[3].value;
            }
        }

RunCommand是包装过的函数,就是执行一下存储过程,红色二句是用于输出ID号的

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2006-03-29 11:26:13)]

非常大鱼

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
#62006/3/29 11:23:50
是啊,过段时间想把自己程序移到2.0上,好象2.0开发比较方便快捷,
sqldatasource,印象中好象是快捷型的,是否想象中的那么强大功能


非常大鱼

Dreaming

职务:普通成员
等级:1
金币:10.0
发贴:1518
注册:2004/7/18 17:48:40
#72006/3/31 11:26:36
感觉什么语言的功能都差不多,只是实现方法不一样(当然分开服务器端和客户端来说),2.0真的使开发效率提高不少,而且性能也提高了(MS说的,按理论也说得通)。

5楼那段代码不错哦~~可惜不是针对datasource的