MySqlException: невозможно добавить или обновить дочернюю строку: ограничение Foreign_key не выполненоC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 MySqlException: невозможно добавить или обновить дочернюю строку: ограничение Foreign_key не выполнено

Сообщение Anonymous »

У меня есть эта ошибка:

MySqlException: невозможно добавить или обновить дочернюю строку: ограничение Foreign_key не выполнено

при выполнении этого кода:

Код: Выделить всё

INSERT INTO networks (owner_name, name, password, ip, visible)
VALUES ('alex', 'alex_net', '1234', '192.168.1.1', 1)
ON DUPLICATE KEY
UPDATE name='alex_net', password = '1234', ip = '192.168.1.1', visible = 1;
Но когда я запускаю его в PhPMyAdmin, он работает отлично.
Почему он не работает в приложении, но работает в PhPMyAdmin?Я использую MySqlConnector/Mono
Функция C#, которая выполняет запрос:

Код: Выделить всё

public static bool InsertOrUpdateNetwork(MySqlConnection connection, NetworkSO networkData)
{
string sql =
$"INSERT INTO networks (owner_name, name, password, ip, visible) " +
$"VALUES ('{networkData.ownerName}', '{networkData.name}', '{networkData.password}', '{networkData.ip}', {networkData.visible}) " +
$"ON DUPLICATE KEY " +
$"UPDATE name='{networkData.name}', password='{networkData.password}', ip='{networkData.ip}', visible={networkData.visible}";

MySqlCommand cmd = new MySqlCommand(sql, connection);
int result = cmd.ExecuteNonQuery();

return result > 0;
}
ПОКАЗАТЬ СОЗДАНИЕ сетей и пользователей:

Код: Выделить всё

CREATE TABLE networks (
owner_name varchar(16) NOT NULL,
name varchar(16) DEFAULT NULL,
password varchar(16) DEFAULT NULL,
ip varchar(15) NOT NULL,
visible tinyint(4) NOT NULL,
PRIMARY KEY (owner_name),
UNIQUE KEY owner_name_UNIQUE (owner_name),
CONSTRAINT fk_network_owner_name FOREIGN KEY (owner_name) REFERENCES users (name) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE users (
name varchar(16) NOT NULL,
password varchar(16) DEFAULT NULL,
logged tinyint(4) DEFAULT NULL,
PRIMARY KEY (name),
UNIQUE KEY name_UNIQUE (name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Полный журнал консоли:

Код: Выделить всё

MySqlException: Cannot add or update a child row: a foreign key constraint fails (sql7721749.networks, CONSTRAINT fk_network_owner_name` FOREIGN KEY (owner_name) REFERENCES users (name) ON DELETE CASCADE ON UPDATE CASCADE)
Мне удалось «решить» эту проблему, добавив SET FOREIGN_KEY_CHECKS=0; перед основной строкой запроса и добавив SET FOREIGN_KEY_CHECKS=1; после строки запроса .
Это позволило мне вставлять/обновлять данные, и когда я удалил пользователя, сеть, ограниченная именем пользователя, также была удалена, поэтому она по-прежнему работает по назначению.
Но Интересно, почему это произошло и правильное ли это решение.

Подробнее здесь: https://stackoverflow.com/questions/788 ... aint-fails
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»