菜鸟一枚,多指正,本帖用于讨论
这次要说的是关于SQL Server中执行不含返回值但是有事物回滚的存储过程时需要注意的问题。
在执行有事物回滚的存储过程时,注意不要执行完就立刻断开数据库连接,例如:
  DBConnect db = new DBConnect();
  int ret = db.connect();
  if(ret!=0)
      return;
  String    sql = "exec Stored_procedure '"+@param1+"','"+@param2+"'";
  db.execute(sql);
  ret = db.disconnect();
  if(ret!=0)
      return;
这样执行的结果是这个存储过程相当于没有执行。推测的原因是连接断开的太快。
下面介绍下我在开发过程用遇到这个问题的经过。
1 、问题描述:
在程序运行过程中发现一个存储过程(有事物回滚)一直没有执行
2 、问题分析:
(1)打断点,Debug,发现该端代码执行正常,执行结果也正常
(2)又运行程序,发现没有得到预期的结果
(3)把要执行的SQL(原来是组成的字符串)打印出来,贴到查询分析器中单独执行,执行结果也正常
(4)在博士指导下,在断开连接(disconnect())的前边加入了如下代码
     try {
           Thread.sleep(2000);
      } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
      } 
    运行结果正常了。 
3、参考意见:
解决上述问题的方法之一就是调用 Thread.sleep(2000);后经测试,还有另一种个人感觉比较好的方法,就是将上述存储过程加一个返回值(如果原来没有的话),这个返回值可以初始化为0(即@@error的值),这样就可以根据这个返回值来判断该存储过程是否执行成功javasql server存储过程事物