如题
     如何解决

解决方案 »

  1.   

    这个是正常的,如果你要得到返回受影响行数的就不能用这方法
    cmd.ExecuteScalre()   方法名不晓得写错没有。
      

  2.   


    string[,] param ={
                                  {"@cardid",cardid},  {"@remit_money",amount.ToString()}, 
                                  {"@bill_no",orderid},    
                                  {"@sms_count",num}, {"@create_ip",Page.Request.UserHostAddress}, 
                                  {"@remit_memo",memo}, {"@create_pserson",user_name}
                                 };
                        int ieffect = DbFactory.ExecuteNonQuery("xps_card_pay", param, true);
      

  3.   


      成功了 ieffect也是等于-1
      

  4.   


    ALTER PROCEDURE [dbo].[xps_card_pay]
    @cardid VARCHAR(50),
    @remit_money DECIMAL(6,2),
    @bill_no VARCHAR(50),
    @sms_count int,
    @create_ip VARCHAR(50),
    @remit_memo VARCHAR(500),
    @create_pserson VARCHAR(50)
    AS
    BEGIN

    DECLARE @count int
    select @count=count(id) from u_sms_card_record where bill_no=@bill_no if @count=0
    begin
    INSERT INTO u_sms_card_record
    (
    cardid,
    remit_type,
    remit_money,
    bill_no,
    sms_count,
    create_ip,
    remit_memo,
    create_pserson,
    create_time
    )
    VALUES
    (
    @cardid,
    2,
    @remit_money,
    @bill_no,
    @sms_count,
    @create_ip,
    @remit_memo,
    @create_pserson,
    GETDATE()
    )

    update u_sms_card set leavings_count=
    ((select leavings_count from u_sms_card where cardid=@cardid)+@sms_count),update_time=getdate()
     where cardid=@cardid
     
    end
    END
      

  5.   

    在进行增删改时,数据库能为我们统计受影响行数的前提条件是,关闭NOCOUNT,即 Set nocount off。默认情况下,它是关闭的,即我们是可以得到受影响的行数的。我们在Visual Studio中写了一个存储过程时,它会被默认加上set nocount on。这样就导致了调用存储过程时始终得不到影响的行数,而返回-1。
      对于update,insert,delete而言ExecuteNonQuery是不存在问题的,这里的问题仅仅是对select而言的
      

  6.   

    在进行增删改时,数据库能为我们统计受影响行数的前提条件是,关闭NOCOUNT,即 Set nocount off。默认情况下,它是关闭的,即我们是可以得到受影响的行数的。你可以测试如下(加与不加set nocount on是有区别的):SqlCommand cmd = new SqlCommand("set nocount on; insert into test values ('test')", con);
    int rows = cmd.ExecuteNonQuery();
    有的人就说了,我仅仅是调用一个简单的存储过程,怎么还是返回-1呢?这个是由于Visual Studio引起的。我们在Visual Studio中写了一个存储过程时,它会被默认加上set nocount on。这样就导致了调用存储过程时始终得不到影响的行数,而返回-1。不过我在Visual Studio 2008 Team Suit中测试了下,这个问题不存在了。可能以前的版本有这样的问题吧(未测试),碰到这种情况就多留意些
      

  7.   

    建议还是将插入和更新还是分开写吧,,,
    ExecuteNonQuery()对select语句返回-1
      

  8.   

    多执行一条命令:set   nocount   off以后就能返回正常值了,你这人就是不听