Have you ever tried to update a Dataset and received this message?

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

Not a problem in a small DataSet. But if your Dataset is more complex sometimes it's not easy to see the problem right away.

There is a property on the DataSet called EnforceConstraints. When you set this to true the DataSet will try to enforce all the constraints in the DataSet (Not null columns, Foreign keys, unique keys) The problem with this exception is, it tells you very little. You know you have violated a constraint, but which one? The way to find out is to look at the row and column errors.

Below is a method that will attempt to apply contraints and write the errors out to the output window. I hope someone out there finds it useful.

Public Sub GetDataSetErrors(ByVal ds As System.Data.DataSet)


Public Shared Sub GetDataSetErrors(ByVal ds As System.Data.DataSet)



ds.EnforceConstraints =


Catch ex As Exception

Debug.WriteLine("DataSet errors: " & ds.DataSetName)


For Each table As DataTable In ds.Tables


Dim ErrorRows As DataRow()

ErrorRows = table.GetErrors()


For Each row As DataRow In ErrorRows

Debug.WriteLine("Table: " & table.TableName)

Debug.WriteLine(" Row Error: " & row.RowError)


Dim ErrorColumns As DataColumn()

ErrorColumns = row.GetColumnsInError()


For Each column As DataColumn In ErrorColumns

Debug.WriteLine("Column: " & column.ColumnName)

Debug.WriteLine(" Error: " & row.GetColumnError(column))








End Try


End Sub