Почему в этом коде есть ошибка несоответствия внешнего ключа?
Я использую C# с библиотекой System.Data.SQLite и получил ошибку несоответствия внешнего ключа. Я создал три таблицы:
Com.CommandText = @"create table Projekt ([ProjectID] Integer NOT NULL Primary key, [Projektname] varchar(360),[ProjektEd] DATETIME, [ProjektLSD] Datetime, [ProjektLD] Datetime);"; Com.ExecuteNonQuery(); Com.CommandText= "create table Template ([TemplateID] Integer NOT NULL Primary key,[Templatename] varchar(360),[TemplateEd] Datetime, [TemplateLSD] Datetime,[TemplateLD] Datetime);"; Com.ExecuteNonQuery(); Com.CommandText = "create table Messung ([MessungID] Integer Not Null Primary Key, [Messungname] varchar(360), [MessungEd] Datetime, [MessungLSD] Datetime, [MessungLD] Datetime, [ProjektID] Integer, [TemplateID] Integer,FOREIGN KEY(ProjektID) REFERENCES Projekt(ProjektID), Foreign Key (TemplateID) References Template(TemplateID)); "; Com.ExecuteNonQuery();
После этого я вставляю это создает мою первую запись в таблице "Projekt" :
Insert into projekt (Projektname, ProjektEd,ProjektLSD, ProjektLD) values ('Messung_Win_3', '2016-06-16 14:47:00','2016-06-27 14:47:00', '2016-07-14 11:12:00');
В то время как это создает мою четвертую запись (у меня есть еще три вставки перед этой) в таблице " шаблон":
Insert into Template (Templatename, TemplateEd, TemplateLSD, TemplateLD) values('Messung_Win_3', '2016-05-19 15:13:00','2016-06-27 14:47:00', '2016-07-14 11:12:00');
Итак, теперь к вопросу: почему эта команда имеет ошибку несоответствия внешнего ключа?
Com.CommandText = "Insert into Messung (Messungname, MessungEd, ProjektID, TemplateID) values ('Board2ROI3','2016-06-16 14:47:00',1,4);";
Я тестирую его через SQLFiddle с помощью SQLite (SQL.js). Ссылка находится здесь: http://sqlfiddle.com/
Там он работал совершенно нормально, но в C# он получает эту ошибку.
Надеюсь вы сможете мне помочь
система C# для базы данных SQLite.данных.базы данных SQLite
Что я уже пробовал:
Создал его внутри SQLFiddle, где он отлично работает
0x01AA
А вы проверяли, действительно ли существуют "праймериз"?
Evosoul04
Да, я так и сделал. Они существуют. Я проверил его по меньшей мере четыре раза. Я сделал это с небольшим запросом.
Select * From Projekt = ProjektID 1 был там
Select * From Template = TemplateID 4 также был там
0x01AA
Что такое сообщение об ошибке axact?
А также взгляните сюда: Зарубежные Базы Данных SQLite Ключевой Уровень Поддержки[^], пункт " 2. включение поддержки внешнего ключа"
Evosoul04
Точное сообщение об ошибке выглядит следующим образом: {"логическая ошибка SQL или отсутствует база данных\r\nforeign key mismatch - \ "Messung\" referencing \ " Projekt\""}
и я включаю внешний ключ одновременно с открытием соединения
Con = new SQLiteConnection ("источник данных=" + Filename +"; внешние ключи=true");
Кон. Открыт();
У меня есть такой способ из этой ссылки: http://stackoverflow.com/questions/4254371/enabling-foreign-key-constraints-in-sqlite
0x01AA
Здорово, что ты решил ее сам.
Небольшая подсказка: для каждого комментария есть кнопка ответа. Использование этого имеет то преимущество, что плакат комментария (на который вы отвечаете) будет проинформирован.
Evosoul04
Ну Ладно. Спасибо, я этого не знал