解决方案 »

  1.   

    因为没描述清楚.完全不知所云
    你光贴出了存储过程的SQL语句,而没有贴出你程序中是如何调用的,甚至不知道你是用什么程序调用的,你让我给你把错误显示哪?难道插到数据库里?此外,ROLLBACK根本没有加上,你问我加上会不会有用,我都不知道你加哪去了,鬼知道会不会有用.
      

  2.   

    我没有在哪里加rollback,只是用了网友的DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK;SET errno = 1; END;这句话.这中间有个rollback 我不知道有没有回滚的作用如果出错的话,描述如果不清楚确实是我错了,我就是想他出错的时候抛出错误,SQLSERVER里边是直接有变量可以获取的,MYSQL我不晓得,网上也一大堆东西。至于程序里面怎么调用,就是传个参数罢了,c#后台调用存储过程除了底层的代码之外,不就一句话吗? 我其他存储过程都没错,这个存储过程也能执行,但是一模一样的数据进去如果出错的话,再把代码返回去执行,结果又成功了,我苦恼的是这个。
      

  3.   

    我没有在哪里加rollback,只是用了网友的DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK;SET errno = 1; END;这句话.这中间有个rollback 我不知道有没有回滚的作用如果出错的话,描述如果不清楚确实是我错了,我就是想他出错的时候抛出错误,SQLSERVER里边是直接有变量可以获取的,MYSQL我不晓得,网上也一大堆东西。至于程序里面怎么调用,就是传个参数罢了,c#后台调用存储过程除了底层的代码之外,不就一句话吗? 我其他存储过程都没错,这个存储过程也能执行,但是一模一样的数据进去如果出错的话,再把代码返回去执行,结果又成功了,我苦恼的是这个。所以后来我想抛出错误也没用了,因为有错的时候我返回去重新执行代码又没有错了,所以肯定捕捉不到错误了。我想弄清楚的是:1.为什么有时候可以有时候不可以。2.我这个存储过程能不能出错回滚。  这个存储过程非常简单,就是存在即更新,不存在即插入。
      

  4.   

    这不是中间有rollback,每个分号是一个操作啊
    如果回滚,就将errno置为1,然后你去查看errno就行了
    你需要在存储过程中判断,都成功就commit,否则rolllback
      

  5.   

    rollback在那句话里已经写了,下面还要写的吗? 我这个存储过程的框架是网上看来的,人家测试过说行。我就拿来套了,我这样写是不能回滚还是怎么样?
      

  6.   

    看这里
    http://bbs.csdn.net/topics/390827195?page=1#post-397706157
      

  7.   

    上面的链接跟这个是同一个
    http://bbs.csdn.net/topics/390827195
      

  8.   

    http://blog.sina.com.cn/s/blog_6dd65c6f0100t3u5.html你要用事物,要按照事物的格式写,然后你说会不会回滚。其实这个自己可以测试一下啊,如果没提交之前出错,肯定会回滚的。
      

  9.   

    这个网站我去看了下  也去实验了一下, 结果还是一样 ,就是出错的时候 再返回去再次执行 ,又正常了,我想问是不是可能是我的数据库有问题? 数据库服务器在linux系统下的,是之前公司一个同事搭的.这个跟数据库有关系吗?
      

  10.   

    这个网站我去看了下  也去实验了一下, 结果还是一样 ,就是出错的时候 再返回去再次执行 ,又正常了,我想问是不是可能是我的数据库有问题? 数据库服务器在linux系统下的,是之前公司一个同事搭的.这个跟数据库有关系吗?
    这样描述你能懂的吧大侠?  我就是奇怪呀....我Q282256078  如果有人知道是为什么 ,请告诉我一下好不
      

  11.   

    因为没有报什么错误信息,很难有说服力,直接在mysql中执行,他会报什么错误?
      

  12.   

    报的错误就是返回1,1是我在存储过程中定义的,我给你看存储过程
    begin 
    declare a int;
    DECLARE errno TINYINT DEFAULT '0';
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET errno = 1;
    START TRANSACTION;
                   select count(tid) INTO a from xy_order1 where tid=tid1;
                   if(a=0) then
    insert into xy_order1 (tid,dp_id,customerno,created,endtime,`status`,trade_from,type,
                            pay_time,total_fee,post_fee,consign_time,modified,trade_insert,trade_update,alipay_no,payment,discount_fee,
                            point_fee,real_point_fee,shipping_type,buyer_cod_fee,seller_cod_fee,express_agency_fee,adjust_fee,
                            buyer_obtain_point_fee,cod_fee,cod_status,buyer_alipay_no,receiver_name,receiver_state,
                            receiver_city,receiver_district,receiver_address,receiver_zip,receiver_mobile,receiver_phone,
                            buyer_email,commission_fee,num,received_payment,promotion_detail,seller_nick,is_brand_sale,is_part_consign,buyer_memo,seller_memo)
                             values(tid1,dp_id1,customerno1
                            ,created1,end_time1,status1
                            ,trade_from1,type1,pay_time1
                            ,total_fee1,post_fee1,consign_time1
                            ,modified1,jdp_created1,jdp_modified1,alipay_no1
                            ,payment1,discount_fee1,point_fee1
                            ,real_point_fee1,shipping_type1,buyer_cod_fee1
                            ,seller_cod_fee1,express_agency_fee1
                            ,adjust_fee1,buyer_obtain_point_fee1,cod_fee1
                            ,cod_status1,buyer_alipay_no1,receiver_name1
                            ,receiver_state1,receiver_city1,receiver_district1
                            ,receiver_address1,receiver_zip1,receiver_mobile1,receiver_phone1
                            ,buyer_email1,commission_fee1
                            ,num1,received_payment1,promotion_detail1,seller_nick1,is_brand_sale1,is_part_consign1,buyer_memo1,seller_memo1);
                   else
    UPDATE xy_order1 set dp_id = dp_id1,
    customerno = customerno1 ,
    created = created,
    `status` = status1 ,
    endtime = end_time1 ,
    trade_from = trade_from1 ,
    type = type1 ,
    pay_time = pay_time1 ,
    total_fee = total_fee1 ,
    post_fee = post_fee1 ,
    consign_time = consign_time1 ,
    modified = modified1 ,
    trade_update=jdp_modified1,
    trade_insert=jdp_created1,
    alipay_no = alipay_no1 ,
    payment = payment1 ,
    discount_fee = discount_fee1 ,
    point_fee = point_fee1 ,
    real_point_fee = real_point_fee1, 
    shipping_type = shipping_type1 ,
    buyer_cod_fee = buyer_cod_fee1 ,
    seller_cod_fee = seller_cod_fee1 ,
    express_agency_fee = express_agency_fee1,
    adjust_fee = adjust_fee1 ,
    buyer_obtain_point_fee = buyer_obtain_point_fee1 ,
    cod_fee = cod_fee1 ,
    cod_status = cod_status1 ,
    buyer_alipay_no = buyer_alipay_no1 ,
    receiver_name = receiver_name1 ,
    receiver_state = receiver_state1 ,
    receiver_city = receiver_city1 ,
    receiver_district = receiver_district1 ,
    receiver_address = receiver_address1 ,
    receiver_zip = receiver_zip1 ,
    receiver_mobile = receiver_mobile1 ,
    receiver_phone = receiver_phone1 ,
    buyer_email = buyer_email1 ,
    commission_fee = commission_fee1 ,
    num = num1 ,
    received_payment = received_payment1 ,
    promotion_detail = promotion_detail1,
    seller_nick=seller_nick1,
    is_brand_sale=is_brand_sale1,
    is_part_consign=is_brand_sale1,
    buyer_memo=buyer_memo1,
    seller_memo=seller_memo1 where tid=tid1;
                   END IF;
    IF (errno=1) THEN
    ROLLBACK;
    ELSE
    COMMIT;
    END IF;
                   SELECT errno;
    end
      

  13.   

     select a=count(tid)  from xy_order1 where tid=tid1; 这么写可以吗?我对mysql不是很熟,mssql是这么写的
      

  14.   


    在页面中输出执行的sql语句,然后复制到mysql中去执行
      

  15.   

    into是没有错的 我觉得语句应该没有错误.
      

  16.   


    在页面中输出执行的sql语句,然后复制到mysql中去执行页面是直接传参的,return SQLDBHelper.RunProcedure("pro_Order1", parameters, "ds").Tables[0].Rows[0][0].ToString(); 没有SQL语句的.
      

  17.   

    lz你就不会去看看
    SQLDBHelper.RunProcedure("pro_Order1", parameters, "ds").Tables[0].Rows[0][0].ToString();
    这个是什么值啊,一般情况会是Error Code,用这个code去MySql官网查就能知道除了什么错了还有,不要怪大家不帮你,你自己没说清楚谁都不知道怎么帮。
      

  18.   

    返回的是我从数据库里返回的标识 ,代表有没有错误,一个值而已,怎么可能会是Error Code? 我存储过程都喜欢在SQL里返回标识,不会直接返回错误信息,这句话一点错误也没有啊.你觉得我在数据库里返回select errno;会有什么问题?可以说说看的
      

  19.   

    SQLDBHelper.RunProcedure("pro_Order1", parameters, "ds")这个返回我的一个结果,是一个表格,会有什么问题?