除了 Try/Catch 和 Exceptions 之外,新的 ADO.NET 数据框架也容许在 DataSet 的每行数据添加错误信息。若是 Updates 或者其余操做失败,SqlDataAdapters 为 Rows 附加上错误信息。此外,你能够过滤错误行呈现给用户,或者把它传递给错误处理函数。
// 设置行的自定义错误 myDataSet.Tables["Customers"].Rows[0].RowError = "添加一个自定义错误"; myDataSet.Tables["Customers"].Rows[1].RowError = "再另外一个自定义错误";
SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind"); SqlDataAdapter myDataAdapter = new SqlDataAdapter("SELECT * FROM Customers", myConnection); DataSet myDataSet = new DataSet(); myDataAdapter.Fill(myDataSet, "Customers"); // 设置行的自定义错误 myDataSet.Tables["Customers"].Rows[0].RowError = "添加一个自定义错误"; myDataSet.Tables["Customers"].Rows[1].RowError = "再另外一个自定义错误"; if (myDataSet.Tables["Customers"].HasErrors) { // 获取包含错误的 DataRow 对象数组 DataRow[] errDataRows = myDataSet.Tables["Customers"].GetErrors(); Console.WriteLine("DataTable " + myDataSet.Tables["Customers"].TableName + " 包含 " + errDataRows.Length.ToString() + " 个 Errors!"); for (int i = 0; i <= errDataRows.Length - 1; i++) { Console.WriteLine("错误行 " + errDataRows[i]["CustomerID"].ToString() + " -- 错误信息:" + errDataRows[i].RowError); } } else { Console.WriteLine("=========================="); Console.WriteLine("DataTable " + myDataSet.Tables["Customers"].TableName + " 没有发现错误!"); }