在C#中添加记录时如何处理数据表中的唯一约束异常
How to handle unique constraint exception in datatable while adding record in C#
我已经像这样向数据表添加了唯一约束
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);
}
谁能告诉我如何处理这个异常?
这不是 SQLException。将您的处理更改为更具体地围绕异常。如果您无法解决 - 将其更改为常规异常。
private void GetTable()
{
try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch(Exception ee)
{
MessageBox.Show("Exception: " + ee.Message);
}
我会避免在这种情况下使用异常。这确实是一个糟糕的模式。当您打开所有异常时,调试起来尤其痛苦。更好的做法是检查记录是否存在,如果不存在则添加。
将异常视为意外事件的边缘情况 - 而不是常规的编码实践。
由于您在本地 DataTable
中定义了约束,因此您正试图捕获错误类型的异常。抛出 SqlException
而不是 ConstraintException
。
立即解决方法是更改 try
子句中的异常类型:
try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch (ConstraintException ee)
{
// handle the exception here
}
如果您想在数据库中检查您的约束,那就是您要定义它的地方,而不是在 DataTable
中。在这种情况下,SqlException
将被抛出,但只有当您将数据发送到数据库时,而不是当您向 DataTable
.
添加行时
我已经像这样向数据表添加了唯一约束
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);
}
谁能告诉我如何处理这个异常?
这不是 SQLException。将您的处理更改为更具体地围绕异常。如果您无法解决 - 将其更改为常规异常。
private void GetTable()
{
try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch(Exception ee)
{
MessageBox.Show("Exception: " + ee.Message);
}
我会避免在这种情况下使用异常。这确实是一个糟糕的模式。当您打开所有异常时,调试起来尤其痛苦。更好的做法是检查记录是否存在,如果不存在则添加。
将异常视为意外事件的边缘情况 - 而不是常规的编码实践。
由于您在本地 DataTable
中定义了约束,因此您正试图捕获错误类型的异常。抛出 SqlException
而不是 ConstraintException
。
立即解决方法是更改 try
子句中的异常类型:
try
{
dtemp.Rows.Add(mTable.TableID,mTable.Capacity);
}
catch (ConstraintException ee)
{
// handle the exception here
}
如果您想在数据库中检查您的约束,那就是您要定义它的地方,而不是在 DataTable
中。在这种情况下,SqlException
将被抛出,但只有当您将数据发送到数据库时,而不是当您向 DataTable
.