1

私はSQL liteをいじり、それを学んでいます。

People というテーブルがあり、データベースに接続して、すべての情報を表示するなどの処理を行うメソッドがあります。

今、私はいくつかのデータを挿入しようとしていますが、ここでそれは私にとって奇妙になります。私はこの方法を持っています:

private void ExecuteQuery(string txtQuery)
{
    SetConnection();
    sql_con.Open();
    sql_cmd = sql_con.CreateCommand();
    sql_cmd.CommandText = txtQuery;
    sql_cmd.ExecuteNonQuery();
    sql_con.Close();
}

そして、私がこのメソッドを持っているすべてのデータを表示するには:

private void LoadData()
{
    SetConnection();
    sql_con.Open();
    sql_cmd = sql_con.CreateCommand();
    string CommandText = "SELECT * FROM People";
    DB = new SQLiteDataAdapter(CommandText, sql_con);
    DS.Reset();
    DB.Fill(DS);
    DT = DS.Tables[0];
    dataGridView1.DataSource = DT;
    sql_con.Close();
}

データを挿入し、その直後に を呼び出すと、LoadData()行ったすべての変更を確認できます。

プログラムを閉じて、もう一度開いて を呼び出したLoadData()後、以前に挿入した新しい情報が表示されません。

SQL lite GUI アプリを使用して挿入したデータを取得しました。メソッドを呼び出すたびにそのデータを確認できますが、私のデータは確認できLoadData()ません。

SQL lite がすべてのデータを確実に保存するために何か他のことをする必要がありますか?

編集:これは私がデータを挿入する方法です、mybee問題はここからですか?

string insetCommand = "INSERT INTO People Values(2,'" + textBox1.Text + "')";

EDIT2:私のconnectionStringメソッド

public static string connectionString
    {
        get
        {
            string database =
                //AppDomain.CurrentDomain.BaseDirectory + "..\\..\\Database\\ImageLib.s3db";
               AppDomain.CurrentDomain.BaseDirectory + "\\DataBase\\myTable2";
            string connectionString =
                @"Data Source=" + Path.GetFullPath(database) + ";Version=3;";
            return connectionString;
        }
    }
4

2 に答える 2

1

問題は、データが一時データベースに保存されているように見えます。

が実際に使用されていることを確認してくださいconnectionString(ファイル名が空の場合、SQLite は一時データベースを使用します)。

アプリケーション内からデータベース ファイル名を確認するにはPRAGMA database_list、クエリのように実行し、結果の 3 列目にファイル名が含まれていることを確認します。出力例:

> pragma database_list;
seq   name   file
----- ------ ----------
0     main   /tmp/test.db
于 2012-09-15T18:12:16.287 に答える
0

コミットステートメントを実行してみてください、私はSQLiteがそれを必要としていると信じています!すべてをトランザクションでラップすることもできます。

于 2012-09-15T16:29:54.563 に答える