只能在Windows窗体

时间:2017-01-25 13:32:26

标签: c# .net sqlite

我尝试在C#中做一个Todolist

我用文本框填满了一个面板。 我使用SQLite。我在当前目录中创建一个文件。 我有简单的表与int和VARCHAR。 但我只能在网上写。 当我重新启动时,我无法重新启动此行。我需要删除SQLite文件。

感谢

开始

namespace Todolist
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                if (!File.Exists("MaBaseDeDonnees.sqlite"))SQLiteConnection.CreateFile("MaBaseDeDonnees.sqlite");
                SQLiteConnection maConnexion;
                var ConnectionString = "Data Source=|DataDirectory|MaBaseDeDonnees.sqlite";
                maConnexion = new SQLiteConnection(ConnectionString);
                maConnexion.Open();
                var sql = "create table IF NOT EXISTS todo (nb INTEGER PRIMARY KEY , data VARCHAR(255))";
                var commande = new SQLiteCommand(sql, maConnexion);
                commande.ExecuteNonQuery();
                sql = "insert into todo (data) values ('text1')";
                sql = "insert into todo (data) values ('text2')";
                commande = new SQLiteCommand(sql, maConnexion);
                commande.ExecuteNonQuery();
                maConnexion.Close();
                display_todo();
            }

显示:

private void display_todo()
{
    var ConnectionString = "Data Source=|DataDirectory|MaBaseDeDonnees.sqlite";
    var maConnexion = new SQLiteConnection(ConnectionString);
    maConnexion.Open();
    var sql = "select * from todo";
    var commande = new SQLiteCommand(sql, maConnexion);

    var reader = commande.ExecuteReader();
    while (reader.Read())
    {
        var textBox1 = new TextBox();
        textBox1.Location = new Point(10, 10);
        textBox1.Text = (string) reader["data"];
        textBox1.Size = new Size(200, 30);
        todoPannel.Controls.Add(textBox1);
    }
    maConnexion.Close();

仅显示text2

抱歉编辑:

sql = "insert into todo (data) values ('text1')";
commande = new SQLiteCommand(sql, maConnexion);
commande.ExecuteNonQuery();
String sql1 = "insert into todo (data) values ('text2')";
commande = new SQLiteCommand(sql1, maConnexion);
commande.ExecuteNonQuery();

我一直都有错误

3 个答案:

答案 0 :(得分:2)

您使用相同的变量(sql)来存储2个不同的插入内容:

sql = "insert into todo (data) values ('text1')";
sql = "insert into todo (data) values ('text2')";

以不同方式命名(sqlsql1)并执行两次插入命令。

答案 1 :(得分:1)

您正在覆盖SQL值:

 sql = "insert into todo (data) values ('text1')";
 sql = "insert into todo (data) values ('text2')";

第二个语句将覆盖前一个值,因此只执行最后一个。

您可以逐个执行多个语句,也可以加入这两个语句,然后执行它们:

 sql = "insert into todo (data) values ('text1');insert into todo (data) values ('text2')";

答案 2 :(得分:0)

这是因为您将命令文本重新分配给sql变量。尝试:

sql = "insert into todo (data) values ('text1')";
sql2 = "insert into todo (data) values ('text2')";
commande = new SQLiteCommand(sql, maConnexion);
commande.ExecuteNonQuery();
commande2 = new SQLiteCommand(sql2, maConnexion);
commande2.ExecuteNonQuery();