gpt4 book ai didi

c# - 如何检测数据库中已有数据的 SQL INSERT 错误?

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:18 25 4
gpt4 key购买 nike

我有一个 C# 应用程序,它使用 MySQL 将数据插入数据库。应用程序有时会插入数据库中已有的数据。检测这种情况下是否存在任何错误的最佳方法是什么?

我知道 ExecuteNonQuery() 返回受影响的行数,因此如果它大于 0,则可以解释为成功的事务。但是,如果数据已经在数据库中,则受影响的行为0,但这也可以认为是成功的事务,因为数据在数据库中。

string sql = @"INSERT my_table (field1, field2) VALUES (@value1, @value2);"

MySqlCommand cmd = new MySqlCommand(sql, connection);

// Execute
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
// Query was successful
}
else
{
// Query *may* have been successful
}

最佳答案

假设您的数据库中的数据会因为重复的键而失败,那么您将需要捕获 SQL 命令将抛出的异常

然后您可以查找错误编号以确定导致错误的原因。对于重复的 key ,我认为错误代码是 1062。

try
{
string sql = @"INSERT my_table (field1, field2) VALUES (@value1, @value2);"
MySqlCommand cmd = new MySqlCommand(sql, connection);

int rowsAffected = cmd.ExecuteNonQuery();
//Do something post insert

}
catch(MySqlException ex)
{
if (ex.Number == 1062)
{
//Duplicate key error. Data already exists now do something.
}
}

MySQL 错误代码的完整列表在这里:https://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html

根据 Sean 上面所说的内容,根据您的用例,您可能只想覆盖 key (更新插入)或忽略错误。

插入忽略

这个命令告诉 Mysql 如果可能的话插入记录。但是如果存在重复则不插入但不抛出错误(抑制或忽略错误)

string sql = @"INSERT IGNORE my_table (field1, field2) VALUES (@value1, @value2);"

替换

此命令告诉 MySql 插入记录,如果需要则用新数据替换现有记录(更新插入)。

string sql = @"REPLACE my_table (field1, field2) VALUES (@value1, @value2);"

本文解释了与此相关的概念和想法并进行了更深入的探讨:https://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm

关于c# - 如何检测数据库中已有数据的 SQL INSERT 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com