Accessing SQL error messages

I'm looking for ways to get hold of the error message produced by an SQL query.

The query in question is calling a stored procedure in a legacy MSSQL system, and an ActiveRecord::StatementInvalid exception is being raised. Is there any way to get information about the exception (like the error message) so it can be displayed to the user?

In a begin..rescue block I can access .message as follows, but I'd rather not be parsing that to get the error message on the third line for obvious reasons

irb(Mssql):005:0> err.message => "DBI::DatabaseError: Execute\n OLE error code:80040E14 in Microsoft OLE DB Provider for SQL Server\n Invalid surname, title or address.\n HRESU LT error code:0x80020009\n Exception occurred.: EXEC lgg_createuserdetails 'Gareth', [snip], 0"

Thanks guys, Gareth

Other than parsing .message, there's no handy way I know to get the error message produced by SQL Server. As errors thrown should indicate exceptional circumstances, the messages within them are really intended for debugging purposes, rather than to display to end users.

The message you seem to be trying to extract looks more like a validation failure. A better approach would be to perform validation before calling the stored procedure. Other than that, parsing the error message is your only hope.

Tom