Jamie Head Ответов: 2

Sqlite & C#, почему я получаю нулевое соединение


Кажется, я получаю нулевое соединение при использовании приведенного ниже кода

private static string LoadConnectionString(string id = "Default")
{
    return ConfigurationManager.ConnectionStrings[id].ConnectionString;
}



using (IDbConnection cnn = new SqliteConnection(LoadConnectionString()))
{

        cnn.Execute("INSERT INTO Main (Member_Name, Member_ID, Member_Roles, Guilds, Points, Level, Exp) VALUES (@Member_Name, @Member_ID, @Member_Roles, @Guilds, @Points, @Level, @Exp)",
            new { Member_Name = username, Member_ID = id, Member_Roles = roles, Guilds = guild_id, Points = 0, Level = 0, Exp = 0 });
}

Вот мое поле App.config "добавить" ниже


<add name="Default" connectionstring="источник данных=.\\Базе The_G_Database.базы данных SQLite;версия=3;" имя_поставщика="системы.Данных.Sqlclient как"&ГТ;

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

Я пробовал использовать прямую строку для моего каталога и различные типы, такие как ссылка на соединение как на его собственный тип "
SqliteConnection cnn = new SqliteConnection(LoadConnectionString())

Richard Deeming

Какой бит есть null?

Вы проверили, что ваш app.config файл был правильно скопирован в выходной каталог и переименован в AppName.exe.config?

Jamie Head

Си-эн-эн, само соединение дает ноль. Я попытался ввести строку подключения вручную, например "источник данных=C:\Database\The_G_Database.sqlite". но все равно не удается создать соединение.

Jamie Head

О. И чтобы ответить на вопрос App.config, да, он находится в правильном каталоге. Он был назван AppName.dll.config, потому что это консольное приложение, но я также скопировал его как AppName.exe.config.

Richard Deeming

Это приложение .NET Core? Консольное приложение .NET Framework должно генерировать .exe, но консольное приложение .NET Core будет генерировать .dll вместо.

2 Ответов

Рейтинг:
1

Sandeep Mewara

Пожалуйста, обратитесь к следующей статье MSDN, чтобы понять, как использовать конфигурационный файл для установки и доступа к строке подключения: Строки подключения и конфигурационные файлы - ADO.NET | Microsoft Docs[^]

Вам нужно будет это сделать:
1. добавьте что-то вроде приведенного ниже в файл App.Config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="ConString" connectionString="Data Source=myPC\SQLServer;Initial Catalog=Northwind;Integrated Security=true"/>
    </connectionStrings>
</configuration>

2. Добавьте Систему.Конфигурация.dll как ссылка на проект.
3. Доступ к строке подключения :
using System.Configuration;

// Later below code
string connectionString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;


Jamie Head

Я попытался добавить начальный каталог и интегрированные Теги безопасности в свою строку подключения, но все равно получаю null в качестве соединения. Я использую консольное приложение, может быть, это как-то связано с ним? Я также попытался просто не использовать App.Config и вместо этого просто жестко закодировать путь непосредственно в SqliteConnection(). Все равно не везет :/

Sandeep Mewara

Если вы говорите, что жесткое кодирование строки подключения в вашем коде напрямую имеет проблему, то это проблема с вашим кодом. Пожалуйста, опубликуйте то, что вы пробовали, когда делали это. Простая простая строка подключения в коде для использования БД.

Кстати, нахождение на консольных приложениях вообще не должно быть причиной.

Jamie Head

using (IDbConnection cnn = new SqliteConnection("Data Source=.\Database\The_G_Database.sqlite;Version=3"))
            {
                
                cnn.Execute("INSERT INTO Main (Member_Name, Member_ID, Member_Roles, Guilds, Points, Level, Exp) VALUES (@Member_Name, @Member_ID, @Member_Roles, @Guilds, @Points, @Level, @Exp)", 
                    new { Member_Name = username, Member_ID = id, Member_Roles = roles, Guilds = guild_id, Points = 0, Level = 0, Exp = 0 });
            }

Вот что я имею в виду под "жестким кодом". Это использование() все еще выбрасывает null как cnn. У этого пользователя, похоже, есть та же проблема -> Строка подключения файла App.Config, но он подключен и я получаю ошибку ссылки на нулевое значение[^]

Jamie Head

https://i.imgur.com/U1VtgAJ.png

Sandeep Mewara

Вот, попробуй это и увидишь. Не слишком ясно, но кажется, что-то неправильно сделано в коде.

https://www.codeproject.com/Articles/22165/Using-SQLite-in-your-C-Application

Jamie Head

Я просмотрел это и все еще получаю эту ошибку, может быть, это пакеты NuGet, которые у меня есть? https://i.imgur.com/A6uzjsw.png

Sandeep Mewara

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

Рейтинг:
0

Jamie Head

Наконец-то я это понял. Похоже, я все это время использовал неправильные пакеты NuGet. Их просто слишком много, ха-ха. Для дальнейшего использования для тех, кто еще хочет возиться с SQLite на C#. Использовать NuGet-пакеты, сделанные командой "файл SQLite развития" (система.Данных.Базы данных SQLite) Я использовал версию Microsoft.