To catch specific SQLExceptions using Microsoft.NET and Microsoft Sequel Server you can use the snippet below. You also need to look for the specific error numbers/codes you want to catch. To do this you can either execute the following query in the SQL Management Studio or you can use this
List of SQLException Numbers/Codes (Direct-DL around 15mb).
Samples
T-SQL Sample
SELECT * FROM master.dbo.sysmessages ORDER BY error ASC
C# Sample
private static void MySqlMethod()
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder
{
DataSource = "localhost",
InitialCatalog = "Northwind",
IntegratedSecurity = true
};
try
{
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
//inserting invalid sql (for example: column not exists)
command.CommandText = "SELECT InvalidColumnName FROM Customers";
command.ExecuteNonQuery();
}
}
}
catch (SqlException ex)
{
// Log the original exception here
foreach (SqlError sqlError in ex.Errors)
{
switch (sqlError.Number)
{
case 207: // 207 = InvalidColumn
//do your Stuff here
break;
case 547: // 547 = (Foreign) Key violation
//do your Stuff here
break;
case 2601: // 2601 = (Primary) key violation
//do your Stuff here
break;
default:
//do your Stuff here
break;
}
}
}
}
VB.NET Sample
Private Sub MySqlMethod()
Dim builder As New SqlConnectionStringBuilder() With { _
.DataSource = "localhost", _
.InitialCatalog = "Northwind", _
.IntegratedSecurity = True _
}
Try
Using connection As New SqlConnection(builder.ConnectionString)
connection.Open()
Using command As SqlCommand = connection.CreateCommand()
'inserting invalid sql (for example: column not exists)
command.CommandText = "SELECT InvalidColumnName FROM Customers"
command.ExecuteNonQuery()
End Using
End Using
Catch ex As SqlException
' Log the original exception here
For Each sqlError As SqlError In ex.Errors
Select Case sqlError.Number
Case 207
' 207 = InvalidColumn
'do your Stuff here
Exit Select
Case 547
' 547 = (Foreign) Key violation
'do your Stuff here
Exit Select
Case 2601
' 2601 = (Primary) key violation
'do your Stuff here
Exit Select
Case Else
'do your Stuff here
Exit Select
End Select
Next
End Try
End Sub
If you have any questions or suggestions feel free to rate this snippet, post a comment or Contact Us via Email.
Related links:
- sys.messages (Transact-SQL)
- SqlException Class
- SqlError Class
- SqlError.Number Property
- SqlConnectionStringBuilder Class
- SqlConnection Class
- SqlCommand Class
- SqlCommand.ExecuteNonQuery Method ()