Sometimes when dealing with a typed dataset (a good idea) you have a problem with constraints, or with nullable fields, or with other stuff. Microsoft gives you a less-than-helpful exception that says "Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints." Right... Well, if you use: ds.EnforceConstraints = false; then you can call this method which will output the table, row, column, and exact constraint that was violated. public void GetDataSetErrors(DataSet ds){ try { ds.EnforceConstraints = true; } catch(Exception ex) { foreach (DataTable table in ds.Tables) { foreach (DataRow row in table.GetErrors()){ System.Diagnostics.Trace.WriteLine("Table: "+ table.TableName); System.Diagnostics.Trace.WriteLine(ex.Message ); System.Diagnostics.Trace.WriteLine("Row: " +row.RowError); foreach (DataColumn col in row.GetColumnsInError()) { System.Diagnostics.Trace.WriteLine("Column " + col.Colum