3

I have the following SQL

INSERT INTO [dbo].[table1] ([val1], [val2]) 
OUTPUT INSERTED.* 
VALUES (@val1, @val2)

I use SqlCommand.ExecuteReader() to get a SqlDataReader that reads the outputed row. It all works fine when the parameters are correct.

The problems begin when the table has a constraint not met by the parameters, for example:

ALTER TABLE [dbo].[table1]
ADD CONSTRAINT [chk_table1_distinct_values] 
CHECK (val1 <> val2)

If I execute the command with the the same value for val1 and val2 the reader fails silently. All I can do is to check the SqlDataReader.HasRows property, that returns false.

So my question is how can I get a more specific error from the returned SqlDataReader?

2 Answers 2

2

Have you inspected the "normal" output like in Capture Stored Procedure print output in .NET

copied from AdaTheDev:

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);
void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    // Do something with e.Message
}
Sign up to request clarification or add additional context in comments.

Comments

0

add begin try..catch and within the catch section, raiserror.

2 Comments

Can this be executed as SqlCommand.CommandText = "TRY ... CATCH .." and ExecuteReader()? Smells more like a stored procedure...
No. what I meant was to implement using T-SQL and raiserror from sproc and you can get an error message from C# exception.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.