Данные не отображаются / не обновляются в таблице SQLite, когда данные вставляются через мой код C # - PullRequest
0 голосов
/ 28 февраля 2019

В настоящее время я занимаюсь простым программированием, связанным с SQL и C #.Я создал эту регистрационную форму, которая будет хранить данные, имя пользователя и пароль в базе данных SQLite.Это код, который я сейчас использую:

private void AddLoginInfo(string username, string password)
    {
        auth = new Authentication();
        auth.getConnection();

        using (SQLiteConnection con = new SQLiteConnection(auth.connectionstring))
        {
            SQLiteCommand cmd = new SQLiteCommand();
            con.Open();

            string que = @"INSERT INTO LoginInfo(Username, Password) VALUES (@username, @password)";
            cmd.CommandText = que;
            cmd.Connection = con;
            cmd.Parameters.Add(new SQLiteParameter("@Username", username));
            cmd.Parameters.Add(new SQLiteParameter("@Password", password));
            cmd.ExecuteNonQuery();

            MessageBox.Show("Account Created!");
        }
    }

Этот код в настоящее время работает и, тем не менее, добавляется к правильной таблице в базе данных при каждом добавлении нового пользователя.Пользовательская информация может использоваться для входа в систему, но она не отображается в таблице, которая просматривается с помощью DB Browser для SQLite.

Например, если я создаю нового пользователя;«admin» в качестве имени пользователя и «password» в качестве пароля, через форму я получаю окно с сообщением «Account Created» и могу использовать эту учетную запись для входа в систему.Однако, если я посмотрю эти данные в браузере БД, они не будут отображаться даже после обновления таблицы.

После некоторого копания я нашел это и увидел, что они былииспользуя sqlCommand.Parameters.AddWithValue, поэтому я попробовал это в своем коде:

SQLiteCommand cmd = new SQLiteCommand(@"INSERT INTO LoginInfo(Username, Password) VALUES (@username, @password)", con);
cmd.Parameters.AddWithValue(new SQLiteParameter("@Username", txtBoxUsername.Text));

Я попробовал это, и я получил ошибку CS7036.Затем я понял, что они не использовали часть new SQLiteParameter(), и поэтому я удалил ее cmd.Parameters.AddWithValue("@Username", txtBoxUsername.Text); и повторил попытку, но она все равно не будет обновляться в таблице, но данные все еще можно будет использовать для входа в систему.

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

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я понял, в чем проблема;Я проверял базу данных, которая была сохранена в решении, но я должен был проверить базу данных, которая хранится в папке ... \ bin \ debug.База данных в папке показывает добавленные данные.

0 голосов
/ 28 февраля 2019

Вы извлекаете файл БД из другой системы?т.е. эмулятор Android или сетевое расположение?

Есть ли какие-либо другие файлы в папке, вы специально ищете имя файла, которое содержит '-wal'. Дополнительная информация о формате SQLite Wal

данные фактически содержатся в этом другом файле.Браузер БД знает, как искать этот файл.Однако, если вы загружаете БД в свою систему до того, как посмотрите, вы, вероятно, тоже не скачиваете файл -wal.

В зависимости от того, как вы настраиваете свою базу данных SQLite, ограничение по умолчанию для порога контрольной точки составляет 1 КБ.Пока контрольная точка не сработает, данные не будут перенесены в основной файл БД.Есть способы ручного запуска контрольной точки, см. Ссылку, которую я включил выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...