LINQ to sql вставка данных c#

#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.Я думаю, проблема будет решена.