我已经为这样的数据表添加了唯一约束
DataTable dtemp
private void TempTable()
{
dtemp = new DataTable("Temp");
dtemp.Columns.Add(new DataColumn("Table", typeof(int)));
dtemp.Columns.Add(new DataColumn("Capacity", typeof(int)));
UniqueConstraint TableUnique = new UniqueConstraint(new DataColumn[] { dtemp.Columns["Table"] });
dtemp.Constraints.Add(TableUnique);
}
当我尝试添加相同的记录,而不是去捕获块时,它只是突然退出程序并在visual studio中给出了唯一约束未处理的异常。
private void GetTable()
{
try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch(SqlException ee)
{
if (ee.Number == 2627)
{
MessageBox.Show("Sorry, This Table Is Already Reserved!");
if (Con.State == ConnectionState.Open) { Con.Close(); }
return;
}
MessageBox.Show("Exception: " + ee.Message);
}
有人可以告诉我如何处理这个例外吗?
答案 0 :(得分:1)
由于您已在本地DataTable
中定义约束,因此您尝试捕获错误类型的异常。 <{1}}而不是ConstraintException
,而不是{{3}}。
立即修复将改变SqlException
子句中的异常类型:
try
如果要在数据库中检查约束,那么您可以在其中定义约束而不是try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch (ConstraintException ee)
{
// handle the exception here
}
。在这种情况下,DataTable
将被抛出,但仅在您将数据发送到数据库时,而不是在向SqlException
添加行时。{/ p>
答案 1 :(得分:0)
这不是SQLException。将处理更改为更具体的异常。如果您无法解决此问题 - 请将其更改为常规例外。
private void GetTable()
{
try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch(Exception ee)
{
MessageBox.Show("Exception: " + ee.Message);
}
我会避免在这种情况下使用异常。这真是一个糟糕的模式。打开所有异常时调试尤其痛苦。更好的做法是检查记录是否存在,然后添加,如果它没有。
将异常视为意外事件的边缘情况 - 而非常规编码实践。