Как я могу добавить содержимое списка в базу данных SQLite?

c# sqlite

1345 просмотра

1 ответ

Я создал SqliteConnection для своей базы данных, и в этой базе данных у меня есть таблица:

var conn = new SqliteConnection("Data Source=" + db);

        // Set the structure of the database
        if (!exists)
        {
            var commands = new[] {
        "CREATE TABLE Phrases (Id INTEGER PRIMARY KEY AUTOINCREMENT, Keyword TEXT, Translation1 TEXT, Translation2 TEXT)"
        };
            conn.Open();
            conn.Open();
            foreach (var cmd in commands)
            {
                using (var c = conn.CreateCommand())
                {
                    c.CommandText = cmd;
                    c.CommandType = CommandType.Text;
                    c.ExecuteNonQuery();
                }
            }
            conn.Close();

Что я хотел бы сделать, это вставить содержимое списка в эту таблицу:

    List<Phrase>

    public partial class Phrase
    {
        public string Keyword { get; set; }
        public string Translation1 { get; set; }
        public string Translation2 { get; set; }
    }

Может кто-нибудь дать мне какой-нибудь совет или предложение о том, как я могу получить данные из списка и вставить в таблицу?

Автор: Alan2 Источник Размещён: 08.11.2019 11:31

Ответы (1)


1 плюс

Решение

Это синтаксис INSERT SQLite, и он требует командных параметров в C #.

Вы можете обернуть соединение и команды в usingи try/catchзаявлении.

string db = "MyDB.s3db";
List<Phrase> phraseList = new List<Phrase>()
{
    new Phrase() { Keyword = "start", Translation1="Hi!", Translation2="Привет!" },
    new Phrase() { Keyword = "end", Translation1="Bye!", Translation2="Пока!" },
};

try
{
    using (var conn = new SQLiteConnection("Data Source=" + db))
    {
        conn.Open();

        string createCmd =
            "CREATE TABLE IF NOT EXISTS Phrases (Id INTEGER PRIMARY KEY AUTOINCREMENT, Keyword TEXT, Translation1 TEXT, Translation2 TEXT)";
        using (var cmd = new SQLiteCommand(createCmd, conn))
        {
            cmd.ExecuteNonQuery();
        }

        string insertCmd =
            "INSERT INTO Phrases (Keyword, Translation1, Translation2) VALUES(?,?,?)";
        foreach (Phrase phrase in phraseList)
        {
            using (var cmd = new SQLiteCommand(insertCmd, conn))
            {
                cmd.Parameters.AddWithValue("@Keyword",phrase.Keyword);
                cmd.Parameters.AddWithValue("@Translation1", phrase.Translation1);
                cmd.Parameters.AddWithValue("@Translation2", phrase.Translation2);
                cmd.ExecuteNonQuery();
            }
        }
        conn.Close();
    }
}
catch (Exception exc)
{
    Debug.WriteLine(exc.Message);
    Debug.WriteLine(exc.StackTrace);
}
Автор: user6996876 Размещён: 20.08.2016 09:59
Вопросы из категории :
32x32