C # и SQLite: не загружается таблица из БД - PullRequest
0 голосов
/ 08 октября 2019

Поэтому я пытаюсь разрешить ввод и чтение данных из БД в sqlite в приложении C #. У меня уже есть данные в таблице в SQLite, и я попытался настроить соединение с БД, но по какой-то причине, когда я пытаюсь запустить форму, которая находится в сборке, закрывается без отображения формы, она загружает вводную формуно как только я пытаюсь войти в форму PDetail, она закрывает мое приложение

public static List <Player> LoadPlayer()
    {
        using (IDbConnection conn = new SQLiteConnection(LoadConnectionString()))
        {
            var output = conn.Query<Player>("select * from Player", new DynamicParameters());
            return output.ToList();
        }
    }

    public static void SavePlayer(Player player)
    {
        using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
        {
            cnn.Execute("insert into Player (Forename, Surname, Position) values (@Forename, @Surname, @Position)", player);
        }
    }


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

Выше показано, как выглядит мой класс SqliteAccess, а ниже - форма, где я хочу получить информацию об игроках и отобразить ихинформация об игроках

public PDetail()
    {
        InitializeComponent();

        LoadPlayerList();
    }

 private void LoadPlayerList()
    {
        playerDetails = SqliteAccess.LoadPlayer();


        WireUpPlayerList();
    }

    private void WireUpPlayerList()
    {

        listBoxPlayers.DataSource = null;
        listBoxPlayers.DataSource = playerDetails ;
        listBoxPlayers.DisplayMember = "PlayerDetails";
    }

Я пробовал следовать инструкциям на YouTube, но не могу понять, что я делаю неправильно, я добавил строку подключения в свой app.config. спасибо за любую помощь!

1 Ответ

0 голосов
/ 09 октября 2019

Я думаю, это может быть связано с вашим файлом БД. Я делаю пример кода в соответствии с кодом, который вы предоставили. Я добавляю метод CreateDBfile метод для создания базы данных. Это может показать правильные данные в списке. Код:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CreateDBfile();
            LoadPlayerList();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        List<Player> playerDetails = new List<Player>();
        private void LoadPlayerList()
        {
            playerDetails = LoadPlayer();


            WireUpPlayerList();
        }

        private void WireUpPlayerList()
        {

            listBox1.DataSource = null;
            listBox1.DataSource = playerDetails;
            listBox1.DisplayMember = "Forename";
        }
        public static List<Player> LoadPlayer()
        {
            using (IDbConnection conn = new SQLiteConnection(LoadConnectionString()))
            {
                var output = conn.Query<Player>("select * from Player", new DynamicParameters());
                return output.ToList();
            }
        }

        public static void SavePlayer(Player player)
        {
            using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
            {
                cnn.Execute("insert into Player (Forename, Surname, Position) values (@Forename, @Surname, @Position)", player);
            }
        }


        private static string LoadConnectionString()
        {
            return "Data Source = MyDatabase.sqlite";
        }
        public void CreateDBfile()
        {
            SQLiteConnection.CreateFile("MyDatabase.sqlite");

            SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite");
            m_dbConnection.Open();

            string sql = "create table Player ([Forename] NVARCHAR(50) NOT NULL, [Surname] NVARCHAR(50) NOT NULL, [Position] NVARCHAR(50) NOT NULL) ";

            SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
            command.ExecuteNonQuery();
            sql = "insert into  Player(Forename,Surname,Position) values('test1','hello','home')";

            command = new SQLiteCommand(sql, m_dbConnection);
            command.ExecuteNonQuery();
            sql = "insert into  Player(Forename,Surname,Position) values('test2','hello1','company')";

            command = new SQLiteCommand(sql, m_dbConnection);
            command.ExecuteNonQuery();
            sql = "insert into  Player(Forename,Surname,Position) values('test3','hello2','school')";

            command = new SQLiteCommand(sql, m_dbConnection);
            command.ExecuteNonQuery();
        }

    }

    public class Player
    {
        public string Forename { get; set; }

        public string Surname { get; set; }

        public string Position { get; set; }

    }

Appconfig:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
      <add name="SQLiteDbContext" connectionString="Data Source=MyDatabase.sqlite" providerName="System.Data.SQLite.EF6" />
    </startup>
</configuration>

Результат: enter image description here

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