Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578

Как программно изменить строку подключения SQLite DBContext?

30.11.2023, 02:37. Показов 1993. Ответов 22

Студворк — интернет-сервис помощи студентам
Как программно изменить строку подключения SQLIte DBContext?

Цель: сделать чтобы пользователь в процессе работы приложения мог выбирать через диалог разные файлы БД SQLIte.
Как это сделать чтобы после выбора в диалоге менялся путь к БД.
Или менять строку подключения в App.config.

Используется:
Nuget: System.Data.SQLite;
Приложение: Console. NET Framework.

Дополнительные библиотеки не хотелось бы устанавливать..
Но если есть необходимость, то можно...

**Способ-1**
Если использовать этот способ создания
C#
1
2
3
string path = @"C:\Projects\dbAppIndexes3.db";
string connectionString = $"Data Source={path}";
DbContextIndexes dbContextIndexes = new DbContextIndexes(connectionString);
То код ничего не возвращает.

**Способ-2**
Если использовать этот способ создания.
Т.е. через изменение App.config, то
`GetAll1()` нормально отрабатывает, а `GetAll2()` читает путь к БД из App.config, а путь предыдущий.
C#
1
2
GetAll1();
GetAll2();
**packages.config**
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.4.4" targetFramework="net48" />
  <package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.118.0" targetFramework="net48" />
  <package id="System.Data.SQLite" version="1.0.118.0" targetFramework="net48" />
  <package id="System.Data.SQLite.Core" version="1.0.118.0" targetFramework="net48" />
  <package id="System.Data.SQLite.EF6" version="1.0.118.0" targetFramework="net48" />
  <package id="System.Data.SQLite.Linq" version="1.0.118.0" targetFramework="net48" />
</packages>
**App.config**
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
  </startup>
    <connectionStrings>
        <add name="DefaultConnection" connectionString="Data Source=dbAppIndexes.db" providerName="System.Data.SQLite" />
    </connectionStrings>
    <entityFramework>
    <providers>
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
    <remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
  </system.data>
</configuration>

**Index**
C#
1
2
3
4
5
6
7
8
9
[Table("Indexes")]
public class Index
{
    public int Id { get; set; }
 
    public string Name { get; set; }
    
    public string Description { get; set; }        
}

**AppService**
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
class AppService
{
    public AppService()
    {
        
        TestMain();
    }
 
 
 
    public void TestMain()
    {
        // Test 1
        // GetAll();
        
        // Test 2
           GetAll1();
           GetAll2();
    }   
 
    public void GetAll()
    {
        try
        {
            // 
            // string path = @"C:\Projects\dbAppIndexes3.db";
            // string connectionString = $"Data Source={path}";
            // DbContextIndexes dbContextIndexes = new DbContextIndexes(connectionString);
 
 
            // 
            string connectionStringsName = "DefaultConnection2";
            DbContextIndexes dbContextIndexes = new DbContextIndexes(connectionStringsName);
 
            IndexesRepository indexesRepository = new IndexesRepository(dbContextIndexes);
 
            var i = indexesRepository.Items.ToArray();
            var indexes = new ObservableCollection<Index>(i);
        }
        catch (Exception ex)
        {
            string s = ex.Message;
            throw;
        }            
    }
 
 
 
    public void GetAll1()
    {
        AppSettingService appSettingService = new AppSettingService();
        
        string path = @"C:\Projects\dbAppIndexes3.db";
        string connectionString = $"Data Source={path}";
        string connectionStringName = @"DefaultConnection";
 
        appSettingService.SaveConnectionString(connectionStringName, connectionString);
        
        DbContextIndexes dbContextIndexes = new DbContextIndexes(connectionStringName);
 
        IndexesRepository indexesRepository = new IndexesRepository(dbContextIndexes);
 
        var i = indexesRepository.Items.ToArray();
        var indexes = new ObservableCollection<Index>(i);
    }
 
    public void GetAll2()
    {
        AppSettingService appSettingService = new AppSettingService();
 
        string path = @"C:\Projects\dbAppIndexes4.db";
        string connectionString = $"Data Source={path}";
        string connectionStringName = @"DefaultConnection";
 
        appSettingService.SaveConnectionString(connectionStringName, connectionString);
 
        DbContextIndexes dbContextIndexes = new DbContextIndexes(connectionStringName);
 
        IndexesRepository indexesRepository = new IndexesRepository(dbContextIndexes);
 
        var i = indexesRepository.Items.ToArray();
        var indexes = new ObservableCollection<Index>(i);
    }
 
 
}

**IndexesRepository**
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class IndexesRepository 
{
 
    DbContextIndexes _db;
    #region Конструктор --- --- --- ---
    public IndexesRepository(DbContextIndexes db)
    {
        _db = db;
    }
 
    #endregion
 
    public IQueryable<Index> Items => _db.Indexes;
 
}
**DbContextIndexes**
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class DbContextIndexes : DbContext
{
 
    public DbContextIndexes() : base("DefaultConnection")
    {
 
    }
 
    
    public DbContextIndexes(string connectionStringsName) : base(connectionStringsName)
    {
 
    }
    
    public DbSet<Index> Indexes { get; set; }        
}
**Program.cs**
C#
1
2
3
4
5
static void Main(string[] args)
{
    // Console.ReadKey();
    AppService appService = new AppService();
}
Миниатюры
Как программно изменить строку подключения SQLite DBContext?  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2023, 02:37
Ответы с готовыми решениями:

Программно изменить строку подключения
Здравствуйте! Как программно изменить строку подключения. Нужно мне это для того, что бы при переноске приложения на другой компютер...

Как изменить строку подключения программно в VS2010
Уважаемые Гуру! Старый проект в VS 2010. Строки подключения прописаны в App.config. Как их изменить программно? (C#)

Где размещать Models, DbContext, строку подключения (ASP.NET Core 5, EF, mdf)?
Как правильно разместить Models, DbContext, строку подключения в рамках текущей архитектуры? Текущая архитектура в составе: -...

22
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,755
Записей в блоге: 4
30.11.2023, 14:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от dev3214 Посмотреть сообщение
Можно глянуть всё решение работы с Excel?
Там слишком много всего и выковыривать оттуда часть с Excel оченно долго.
Цитата Сообщение от dev3214 Посмотреть сообщение
Вы используете Microsoft.Office.Interop.Excel?
Нет.
Цитата Сообщение от dev3214 Посмотреть сообщение
Вы используете другую библиотеку плат/бесплат?
ADO .NET и ClosedXML
Цитата Сообщение от dev3214 Посмотреть сообщение
Ваше решение читает/пишет в/из Excel?
Да. Чтение ADO .NET (OleDbCommand). Запись - ClosedXML.
1
30.11.2023, 23:14  [ТС]

Не по теме:


Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Там слишком много всего и выковыривать оттуда часть с Excel оченно долго.
Извините, если не очень сложно, то можно строку подключения?
Если сильно ковырять нужно... то попробую сам...
Я пробую
C#
1
2
3
4
5
6
7
8
9
10
11
12
// Connection string for ODBC Excel Driver  
            // string ConnectionString =@"Driver={Microsoft Excel Driver (*.xls)};DBQ=c:\Employees.xls";
            // ---
            // string ConnectionString = @"Driver={Microsoft Excel Driver (*.xlsx)};DBQ=e:\Projects\Projects\5413\00_ref\Excel\Products\TestProducts.xlsx";
 
            // **
            //string ConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};"
            //                        + "Extended Properties = \"Excel 12.0 Xml;HDR=YES\"";
            
            // **
            string ConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};"
                                    + "Extended Properties = \"Excel 12.0;HDR=Yes;IMEX=2\"";
Пишет: "ERROR [IM002] [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию"

Не по теме:

hr


ExcelDataReader имеет недостатки?

Предполагаемое использования:
- .NET Framework. WPF;
- Количество записей для чтения: 100 - 10 000 шт.;
- Типы данных полей в записи: int, string, bool, DateTime.

github.com/ExcelDataReader/ExcelDataReader


0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,755
Записей в блоге: 4
01.12.2023, 08:23
Цитата Сообщение от dev3214 Посмотреть сообщение
если не очень сложно, то можно строку подключения?
Я вам показывал строку вот тут, другой у меня нет.
Цитата Сообщение от dev3214 Посмотреть сообщение
ExcelDataReader имеет недостатки?
Без понятия что это такое...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2023, 08:23

Как изменить строку подключения fioConnectionString?
Сейчас так Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=|DataDirectory|\fio.mdb Как ее можно изменить на свой путь через код?

Как изменить строку подключения для Dataset'ов?
Здравсвуйте, крик отчаяния. Перечитал все темы, не могу сделать. И так: у меня есть программа, на главной вкладке авторизация с выбором...

Как через textbox изменить строку подключения SqlConnection (Sql и forms)
internal class DataBase { public string con = @&quot;Data Source=Путь;Initial Catalog=Название Бд;Integrated...

Как изменить строку подключения к связанной таблице в Аксесс через Excel
Суть вопроса: Имеется база данных в аксесс. В ней есть связанная таблица, которая берет данные из текстового файла, по определенному...

Как изменить схему классов в DBContext при добавлении нового класса?
Есть проект с 3 классами на dbContext (Entity 6) Я хочу добавить в схему 4-й и 5-й. Как мне это сделать с помощью VS2013, ну там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru