Итак, у меня есть база данных с уникальным ограничением нескольких столбцов. Очевидно, чтобы предотвратить дубликаты. При отладке моего приложения моя консоль полностью заполнена MySql.Data.MySqlClient.MySqlException
sКак заставить MySql.Data.MySqlClient.MySqlException Дублировать запись
Есть ли способ подавить их, поскольку это предназначенная функция базы данных? Похоже, что исключение исключает это исключение. Он будет обрабатывать его на основе моего оператора catch(MySqlException e)
, но все же показывает MySql.Data.MySqlClient.MySqlException
в консоли.
Вот мой код:
public void InsertNewTeamHistory(TeamHistoryRow teamHistoryRow)
{
//open connection
if (this.OpenConnection)
{
try
{
var query =
"INSERT INTO teamhistory(MatchURL, Date, TeamOne, TeamOneScore, TeamTwo, TeamTwoScore, Map, Event, Outcome) " +
"VALUES(?MatchURL, ?Date, ?TeamOne, ?TeamOneScore, ?TeamTwo, ?TeamTwoScore, ?Map, ?Event, ?Outcome)";
//create command and assign the query and connection from the constructor
using (var cmd = new MySqlCommand(query, _connection))
{
if (cmd.Connection.State == ConnectionState.Open)
{
cmd.Parameters.Add("?MatchURL", MySqlDbType.VarChar).Value = teamHistoryRow.MatchUrl;
cmd.Parameters.Add("?Date", MySqlDbType.Date).Value = teamHistoryRow.Date;
cmd.Parameters.Add("?TeamOne", MySqlDbType.VarChar).Value = teamHistoryRow.TeamOne;
cmd.Parameters.Add("?TeamOneScore", MySqlDbType.Int32).Value = teamHistoryRow.TeamOneScore;
cmd.Parameters.Add("?TeamTwo", MySqlDbType.VarChar).Value = teamHistoryRow.TeamTwo;
cmd.Parameters.Add("?TeamTwoScore", MySqlDbType.Int32).Value = teamHistoryRow.TeamTwoScore;
cmd.Parameters.Add("?Map", MySqlDbType.VarChar).Value = teamHistoryRow.Map;
cmd.Parameters.Add("?Event", MySqlDbType.VarChar).Value = teamHistoryRow.Event;
cmd.Parameters.Add("?Outcome", MySqlDbType.VarChar).Value = teamHistoryRow.Outcome;
//Execute command
cmd.ExecuteNonQuery();
//close connection
this.CloseConnection();
}
else
{
throw new Exception("Failed - Connection to the DB NOT open.");
}
}
}
catch (MySqlException e)
{
switch (e.Number)
{
case 1062:
Console.WriteLine("Found Duplicate TeamHistoryRow, Not Inserting.");
break;
case 0:
Console.WriteLine("Well, we fucked up.");
break;
default:
throw;
}
}
finally
{
try
{
this.CloseConnection();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
Что вы хотите делать, если запись уже существует? Вы хотите обновить эту запись со значениями или просто проигнорировать вставку и продолжить? – Steve
Игнорируйте вставку и продолжайте. Но я не хочу, чтобы он выводил «Exception throw»: «MySql.Data.MySqlClient.MySqlException» в MySql.Data.dll, так как я обрабатываю тысячи или строки в минуту, и мне очень сложно читать мои фактические выход программы. –