@deadspace12

Как обеспечить относительный путь к БД SQLite?

я пробовал запросом insert вставить данные к таблицам через абсолютный путь к БД и все работает, а вот через относительный не выходит, сделал автоопределение каталога тип где он находится через Path.Combine но все равно не вышло. Вот мой код:
public class ElGamalParametersExporter
{
private string connectionString;

public ElGamalParametersExporter(string dbFileName)
{
    string relativePathToDB = Path.Combine("database", dbFileName);
    string absolutePathToDB = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, relativePathToDB);
    connectionString = $"Data Source={absolutePathToDB}";
}

public void ExportParameters(BigInteger p, BigInteger g, BigInteger x, BigInteger y)
{
    try
    {
        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            // Вставляем параметры p и g в таблицу ElGamalParameters
            using (var command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO ElGamalParameters (P, G) VALUES (@p, @g)";
                command.Parameters.AddWithValue("@p", p.ToString());
                command.Parameters.AddWithValue("@g", g.ToString());
                command.ExecuteNonQuery();
            }

            // Вставляем открытый ключ y в таблицу ElGamalPublicKey
            using (var command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO ElGamalPublicKey (PublicKey) VALUES (@y)";
                command.Parameters.AddWithValue("@y", y.ToString());
                command.ExecuteNonQuery();
            }

            // Вставляем закрытый ключ x в таблицу ElGamalPrivateKey
            using (var command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO ElGamalPrivateKey (PrivateKey) VALUES (@x)";
                command.Parameters.AddWithValue("@x", x.ToString());
                command.ExecuteNonQuery();
            }
        }
    }
    catch (Exception ex)
    {
        MetroFramework.MetroMessageBox.Show(null,"Ошибка при экспорте параметров и ключей в базу данных: " + ex.Message,);
    }

и ее реализация в кнопке
private void Gen_param_Click(object sender, EventArgs e)
{
// Генерация ключей ElGamal
Tuple<ElGamalParameters, BigInteger, BigInteger> keys = ElGamalKeyGenerator.GenerateElGamalKeys();

// Получение параметров и ключей
BigInteger p = keys.Item1.P;
BigInteger g = keys.Item1.G;
BigInteger x = keys.Item2;
BigInteger y = keys.Item3;

// Вывод значений в MetroTextBox элементы
textBoxP.Text = p.ToString();
textBoxG.Text = g.ToString();
textBoxPrivateKey.Text = x.ToString();
textBoxPublicKey.Text = y.ToString();

string absolutePathToDB = @".\database\Keys.db";
ElGamalParametersExporter exporter = new ElGamalParametersExporter(absolutePathToDB);
exporter.ExportParameters(p, g, x, y);
}

Вот полный путь к БД: D:\Учеба\ИТИ магис\2 курс 2 сем\Диссертация\проект\Programs\EL_Gamal\EL_Gamal\database\Keys.db и поставил свойство копировать в выходной каталог с 0 на 1 Подскажите как задать относительный путь чтоб работал запрос Insert, если на абсолютном он работает нормально.
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 3
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Скорее всего рабочая директория другая - не директория с исходным кодом. Т.к. запуск производится где-то из bin/Debug/net8.0/..., а там этой БД и нет.
Тут 2 решения:
1. Прописывай относительный путь с учетом папки: ../../../database/Keys.db
2. Прописывай абсолютный путь

Но лично я рекомендую вынести это куда-нибудь в конфигурацию, а не простой строкой в исходном коде (передавай например через аргументы командной строки).

P.S. путь для 1 кейса не факт что правильный - поиграйся с путями
Ответ написан
mindtester
@mindtester Куратор тега Windows
http://iczin.su/hexagram_48
кроме камента выше - если база макетная, можно включить в исходный проект, с опцией "копировать в выходной каталог"..
как один из вариантов. удобно, если предполагается небольшая база, работающая по месту расположения кода
Ответ написан
Adler_lug
@Adler_lug
File.Exists() находит файл по относительному пути?
Вообще относительные пути в чистом виде зло.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы