我有一个包含一些列的表,我在其中的 3 个列上设置了唯一键以确保表中没有重复项。现在我想知道是否使用 try/catch 吞下重复抛出的异常并继续更新在 foreach
中插入下一行是否是一个好方法?
try {
sqlWrite.ExecuteNonQuery();
} catch (SqlException sqlException) {
if (!sqlException.ToString().Contains("Violation of UNIQUE KEY constraint")) {
MessageBox.Show("Error - " + Environment.NewLine + sqlException.ToString(), "Error SQL");
}
} catch (Exception exception) {
MessageBox.Show("Error - " + Environment.NewLine + exception.ToString(), "Error SQL");
}
或者我应该在插入查询中执行 SELECT 以检查行是否存在以及它是否跳过插入?我读到将异常用作数据验证的一部分并不好,但有些东西应该这样使用(例如 How to check For File Lock in C#? 应该与 try/catch 一起使用)。
最佳答案
如果您有其他方法,则永远不要抛出和捕获异常。而你现在拥有了它。使用它!
您可以创建单个 sql 脚本或存储过程,使用 IF NOT EXISTS(SELECT ...)
检查和插入。进行两次查询速度较慢。
关于c# - 在带或不带 try/catch 的 SQL 中使用唯一键作为验证数据完整性的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10091199/