我在使用SQL Server 2008R2的Windows上的Ruby DBI / ODBC中捕获SQL错误时遇到问题。
我的环境是:
如果我运行单个语句,那么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错误吗?