kZR Ответов: 4

Локальная база данных не сохраняет данные.


Привет,

Когда я пытаюсь вставить что-то в свою локальную базу данных (SQL Compact), она действительно добавляет. Но это не спасает. Я пробовал несколько вещей. Вот мой код:

строка подключения
public static SqlCeConnection Connect()
{
    SqlCeConnection connection = new SqlCeConnection();
    connection.ConnectionString = @"Data Source=|DataDirectory|\Database\Database.sdf";
    connection.Open();

    return connection;
}


Класс "Добавить".
public static void AddTodo(string title, string description, string content)
{
    SqlCeCommand command = new SqlCeCommand("insert into items (title, description, content) values (@Title, @Description, @Content)", Database.Connect());
    command.Parameters.Add(new SqlCeParameter("Title", title));
    command.Parameters.Add(new SqlCeParameter("Description", description));
    command.Parameters.Add(new SqlCeParameter("Content", content));
    command.ExecuteNonQuery();
    Database.Disconnect();
}


Последний фрагмент кода
private void addButton_Click(object sender, RoutedEventArgs e)
{
    TodoAdder.AddTodo(titleBox.Text, descriptionBox.Text, contentBox.Text);
}


Когда я перестраиваю базу данных, она удаляет ее. Или его там никогда не бывает.

Заранее спасибо.

Обновленный вопрос:
Когда я выполняю запрос insert, он действительно появляется в списке. Но когда я проверяю свою базу данных, она пуста. Кроме того, когда я перезапускаю программу. Она снова пуста.

4 Ответов

Рейтинг:
1

JOAT-MON

Попробуйте сопоставить имена параметров при добавлении значений. Так где же это написано:

command.Parameters.Add(new SqlCeParameter("Title", title));

должно быть:
command.Parameters.Add(new SqlCeParameter("@Title", title));


kZR

В любом случае, это не сработает.

Рейтинг:
1

fcronin

Я не уверен, но мне кажется, что я уже видел, что некоторые конфигурации баз данных имеют флаг для автоматической фиксации или нет... возможно, вы захотите убедиться, что в вашем случае включена автоматическая фиксация... или отправить фиксацию после добавления записи.


Рейтинг:
1

Dev. RoOo7

Привет,

Закрытие соединения должно завершить вставку.

соединение.Располагать();
соединение.Закрывать();


удачи.


kZR

В любом случае, это не сработает.

Рейтинг:
0

Gordon Beeming (RSA)

Пометьте sdf-файл как копию только в том случае, если он отличается, или удалите его из вашего решения и храните только в 1 месте, например: bin вашего приложения


kZR

Он по-прежнему не добавляет никаких данных в базу данных. Он просто остается пустым. Но он действительно отображается в списке. Он просто не добавляется в базу данных.

fcronin

... проверяли ли вы \bin\debug или \bin\release для просмотра другого файла БД, чтобы увидеть, есть ли там ваша запись(ы)...?

Philippe Mori

Это, наверное, ваша проблема. Я думаю, что по умолчанию копия базы данных создается при сборке приложения и используется во время выполнения. Обычно это то, что мы хотим, поскольку база данных, используемая во время разработки, обычно должна оставаться "пустой".

Смотреть также Поиск DataDirectory в Google

Philippe Mori

Кстати, копирование только при изменении может быть хорошей альтернативой, если вы редко меняете таблицу, и в этом случае не имеет значения перезапуск с нуля. В противном случае вам, как правило, придется сделать некоторый код для обновления существующей базы данных при изменении ее формата.

Если тебе не нравится как |DataDirectory| работает, вы всегда можете создать свою строку подключения с именем файла, которое вы создадите вручную.