批处理不传播SQL错误

时间:2014-12-19 13:04:43

标签: ruby sql-server windows

我在使用SQL Server 2008R2的Windows上的Ruby DBI / ODBC中捕获SQL错误时遇到问题。

我的环境是:

  • Windows server 2008R2
  • ruby​​ 1.9.3
  • devkit 4.5.2
  • gems:dbi,ruby-odbc,dbd-odbc

如果我运行单个语句,那么DBI会将SQL错误转换为Ruby异常。也就是说,以下工作:

begin        
  dbh.do( "raiserror( 'test exception 1', 16, 1 )" )
rescue DBI::DatabaseError => e
  puts "An error occurred"
  puts "Error code:    #{e.err}"
  puts "Error message: #{e.errstr}"
end

运行它会按预期生成异常:

An error occurred
Error code:
Error message: 37000 (50000) [Microsoft][SQL Server Native Client 10.0][SQL Server]test exception 1

但是,当我执行包含raiserror的一批语句时,将忽略该错误:

begin
  dbh.do( "insert into mw values(getdate());  raiserror( 'test exception 2', 16, 1 ); insert into mw values(getdate())" )
rescue DBI::DatabaseError => e
  puts "An error occurred"
  puts "Error code:    #{e.err}"
  puts "Error message: #{e.errstr}"
end

执行时,两个插入成功,但是忽略了raiserror。

有人知道在Windows上使用Ruby DBD / ODBC时如何可靠地检测SQL错误吗?

0 个答案:

没有答案