首页新闻找找看学习计划

关于.net存储过程

0
悬赏园豆:20 [待解决问题]

使用存储过程插入数据后怎么获取受影响的行数?具体一点。。。代码怎么写

xi慣cheń默的主页 xi慣cheń默 | 初学一级 | 园豆:182
提问于:2012-09-14 14:48
< >
分享
所有回答(5)
0

都不知道你问的是插入的行数,还是总行数?

插入数据有很多方式,insert into ……,select into……都可以,就看你是怎么插的了,实在不行插之前查一次count(*),插之后查一次COUNT(*)喽!

老吉的园子 | 园豆:193 (初学一级) | 2012-09-14 14:53

插入行数 

支持(0) 反对(0) xi慣cheń默 | 园豆:182 (初学一级) | 2012-09-14 14:53

我的意思是使用了存储过程插入数据。。获取返回行数怎么写

支持(0) 反对(0) xi慣cheń默 | 园豆:182 (初学一级) | 2012-09-14 14:55
0

ADO.net中的ExecuteNonQuery()返回的就是int类型,也就是影响的行数。

青 蛙 | 园豆:655 (小虾三级) | 2012-09-14 15:08
/// <summary>
    ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
    /// 使用参数数组形式提供参数列表 
    /// </summary>
    /// <remarks>
    /// 使用示例:
    ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    /// </remarks>
    /// <param name="connectionString">一个有效的数据库连接字符串</param>
    /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
    /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
    public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {

        SqlCommand cmd = new SqlCommand();

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();

            //清空SqlCommand中的参数列表
            cmd.Parameters.Clear();
            return val;
        }
    }
    
    /// <summary>
    ///执行一条不返回结果的SqlCommand,通过一个已经存在的数据库连接 
    /// 使用参数数组提供参数
    /// </summary>
    /// <remarks>
    /// 使用示例:  
    ///  int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    /// </remarks>
    /// <param name="conn">一个现有的数据库连接</param>
    /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
    /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
    public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {

        SqlCommand cmd = new SqlCommand();

        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
    }

    /// <summary>
    /// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 
    /// 使用参数数组提供参数
    /// </summary>
    /// <remarks>
    /// 使用示例: 
    ///  int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    /// </remarks>
    /// <param name="trans">一个存在的 sql 事物处理</param>
    /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
    /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
    public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {
        SqlCommand cmd = new SqlCommand();
        PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
    }
支持(0) 反对(0) 青 蛙 | 园豆:655 (小虾三级) | 2012-09-14 15:11

@青 蛙: 谢谢。。可以下强类型做出来么?

支持(0) 反对(0) xi慣cheń默 | 园豆:182 (初学一级) | 2012-09-14 15:33
0

select @@ROWCOUNT

沧海一杰 | 园豆:48 (初学一级) | 2012-09-14 15:13

不明白怎么用哦。要用到强类型

支持(0) 反对(0) xi慣cheń默 | 园豆:182 (初学一级) | 2012-09-14 15:34

你可以把这句写到你的存储过程里,那么存储过程就会多一个结果集,你读出来就可以了

或者你就直接调用存储过程,executeNonQuery,它的返回值是一个int型,就是影响的行数

如果你的存储过程是执行多次更新,你在每次更新后累加@@ROWCOUNT,返回给客户端就可以了

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2012-09-14 16:01
0

如果你的表有一个自增列 可以用到select @@identity就是插入数据是产生的值

~大大小小 | 园豆:206 (菜鸟二级) | 2012-09-14 15:21

表的id是自增的,这个该怎么写?

我的存储过程是这样写的:

create proc insertQuestion
@qname varchar(20),
@qtitle varchar(200),
@qcontent varchar(1000),
@qdatetime dateTime
as
begin
insert into question(qname,qtitle,qcontent,qdatetime)values(@qname,@qtitle,@qcontent,@qdatetime)
return @@rowcount
end

支持(0) 反对(0) xi慣cheń默 | 园豆:182 (初学一级) | 2012-09-14 15:35

改return @@rowcount

为 select @@rowcount

 就可以,或者直接取@identity,如果返回null,就失败啊,就一行,你还要什么影响行数

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2012-09-14 16:03

取到插入成功的那一行所在数据的id,返回为NULL时肯定插入不成功的,所以判定是失败 select @@identity作为一个返回值就行了

支持(1) 反对(0) ~大大小小 | 园豆:206 (菜鸟二级) | 2012-09-14 16:27
0

这个很简单    如  select * from table

现在你想看他影响的行数  可以用如下语句

select @@RowCount   返回影响行数

狼之崛起 | 园豆:211 (菜鸟二级) | 2012-09-26 14:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册