#c# #database #linq #linq-to-sql
#c# #База данных #linq #linq-to-sql
Вопрос:
Я создал одну функцию, целью которой является добавление данных в базу данных (я использую linq to sql)
Это код, который я написал
public static void Add(string Name, int Quantitty) {
DataDataContext Database = new DataDataContext();
tests test = new tests();
test.Name = Name;
test.Quantity = (short)Quantitty;
Database.tests.InsertOnSubmit(test);
Database.SubmitChanges();
}
Я открыл свое приложение, нажал кнопку, которая вызывает эту функцию, и закрыл приложение, затем я открыл табличные данные в VS, и в базе данных не было данных.
Я не понимаю, что я делаю не так.
Ответ №1:
Используете ли вы файл локальной базы данных (например, Database1.sdf)? В этом случае база данных копируется в папку bin при сборке вашего приложения, которое затем использует эту копию. Приложение добавляет данные в файл, отличный от того, который открывает VS.
Комментарии:
1. Нет, я использую базу данных на основе сервиса (.mdf)
2. Базы данных на основе сервисов также копируются в выходную папку. Попробуйте подключить VS к mdf-файлу в bin / debug, где вы запускаете свое приложение, и посмотрите, попадают ли данные в него.
Ответ №2:
вы выполнили переход в режиме отладки, чтобы увидеть, есть ли у вас какие-либо ошибки? кстати, у вас, вероятно, должна быть инструкция using и, может быть, там есть try catch?
отредактируйте, чтобы добавить пример кода
это покажет, вызвано ли исключение в SubmitChanges, также использование гарантирует, что вызывается dispose
using(var Database = new DataDataContext())
{
tests test = new tests();
test.Name = Name;
test.Quantity = (short)Quantitty;
Database.tests.InsertOnSubmit(test);
try
{
Database.SubmitChanges();
}
catch (ChangeConflictException e)
{
//report error, log error whatever...
}
}
Ответ №3:
1- Используйте try, catch.
2- Какой из них является первичным ключом? Вы не можете выполнить вставку без первичного ключа (или таблица должна иметь первичный ключ)
3- Вы отладили свой код?
Комментарии:
1. Да, у него есть первичный ключ, проблема в том, что я не знаю, как его добавить, поскольку я выбрал, чтобы он был увеличен на единицу сам по себе, да, я отладил свой код
2. поэтому я рекомендую использовать try catch, и давайте посмотрим, что произойдет.
3. вы пробовали использовать SQL Profiler, чтобы зафиксировать, какая инструкция SQL (если таковая имеется) отправляется из Linq в БД?
Ответ №4:
Привет, используйте тип данных timestamp.Я думаю, проблема будет решена.