CengBrothers Ответов: 1

Шифрование базы данных SQLite


Я пишу код на c#.

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

Ошибка : файл не является базой данных



Я использую Entity Framework.

Что я уже пробовал:

//создать зашифрованный файл базы данных sqlite с новым именем
внутренний статический недействительным метода createdatabase(строка полное имя)
{
CodeFirst = true;
Источник данных = полное имя;
Агрегат АСМ = Ассамблеи.GetExecutingAssembly();
string ns = typeof(Context).Namespace;
если (файл.Существует(полное имя))
{
Файл.Delete(fullName);//файл резервной копии будет удален
}

использование (Stream stream = asm.GetManifestResourceStream($"{ns}.sqlitedatabasefile"))
{
using (FileStream fileStream = new FileStream(fullName, FileMode.CreateNew, FileAccess.Писать))
{
течение.CopyTo(fileStream);
}
}
}

//Затем я пишу ниже коды для управления версией и подключения базы данных

public Context() : base(new SQLiteConnection
{
ConnectionString = новый SQLiteConnectionStringBuilder
{
Источник = Источник Данных,
На foreignkeys = истина,
BinaryGUID = false,
Зачет = ложь,
SetDefaults = false,
Размер страницы = 1024,
Версия = 3,
//Password= "1234" //не работает
}.Параметр connectionString
}, истинный)
{

DbConfiguration.SetConfiguration(новая конфигурация SQLiteConfiguration());

если (база данных.Соединение это SQLiteConnection conn)
{
//conn.setPassword("123"); //не работает
Коннектикут.Открыть();

использование (SQLiteCommand cmd = conn.CreateCommand())
{

боол hasColumn= ложь;
УМК.CommandText = "PRAGMA table_info(Student)"; //Student - это таблица.
использование (SQLiteDataReader reader = cmd.ExecuteReader())//ошибка.
{
int nameIndex = читатель.GetOrdinal("Имя");
в то время как (читатель.читать())
{
если (читатель.GetString(nameIndex).Равные("Возраст"))
{
hasColumn= истина;
перерыв;
}
}
}

//Добавить столбец возраст в таблицу студентов
если (!hasColumn)
{
База данных.ExecuteSqlCommand("альтер студент таблице добавить столбец "возраст" целое число, по умолчанию -1");
//База данных.ExecuteSqlCommand($@"UPDATE Setting SET Version= 2 , ReleaseDate ='{DateTime.Now.ToShortDateString()}'");
var version = настройка.FirstOrDefaultAsync();
версия.Результат.Версия = 2;
версия.Результат.Класса Releasedate = Датавремя.Сейчас;
SaveChanges();
Система.Окна.Форм.Функции MessageBox.Показать("ваша база данных обновлена...", "информационное сообщение", система.Окна.Формы.MessageBoxButtons.Ладно, система.Окна.Формы.MessageBoxIcon.Информация);
}

}
}
}

Richard MacCutchan

Вам нужно расшифровать файл, прежде чем записывать его на диск.

CengBrothers

где и как ? Я тебя не понимаю. Я использую SQLite Meastro и Db Browser для SQLite. Я даю пароль в одной из других программ, которые не открываются, или наоборот, я делаю это в редакторах.

Richard MacCutchan

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

1 Ответов

Рейтинг:
1

Richard MacCutchan

Также пробовать Техническая поддержка SQL Maestro[^]


CengBrothers

спасибо, я попробую