Evosoul04 Ответов: 1

Почему в этом коде есть ошибка несоответствия внешнего ключа?


Я использую 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

Ну Ладно. Спасибо, я этого не знал

1 Ответов

Рейтинг:
6

Evosoul04

Я нашел решение....
Это была простая орфографическая ошибка...
В моей таблице у меня есть "ProjeCtID", в то время как в моей вставке я использую "ProjeKtID"