【问题标题】:SQLite doesn't save data I insertedSQLite 不保存我插入的数据
【发布时间】:2012-09-08 10:44:39
【问题描述】:

我正在玩弄 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;
        }
    }

【问题讨论】:

  • 您是否有 SQLite 数据库作为 Visual Studio 项目的一部分?
  • 我不确定我是否理解,我该如何检查?
  • 您应该在某处使用 .db3 文件(或等效文件)。这是否包含在 VS 解决方案中,或者您只是将其作为单独的文件加载?

标签: c# sql winforms sqlite sql-insert


【解决方案1】:

您的问题看起来好像您的数据存储在临时数据库中。

请检查您的connectionString 是否被实际使用(如果文件名为空,SQLite 将使用临时数据库)。

要从应用程序内部检查数据库文件名,请像查询一样执行PRAGMA database_list,并检查结果的第三列是否包含您的文件名。示例输出:

> pragma database_list;
seq   name   file
----- ------ ----------
0     main   /tmp/test.db

【讨论】:

  • 将我的 dababase 文件的名称更改为 myTable2.db 和连接字符串,现在它可以工作了。谢谢你!
  • 奇怪,我做了一些测试,它仍然无法正常工作。如何执行 PRAGMA database_list? (我不知道)。谢谢
  • 用string CommandText = "PRAGMA database_list";代替string CommandText = "SELECT * FROM People";。
  • 它返回:0 main C:\Users\roei\documents\visual studio 2010\Projects\SmarterSqlLiteTest\SmarterSqlLiteTest\bin\Debug\DataBase\myTable2.db
  • 这是你的文件。检查插入后时间戳是否改变,或者重建时是否会自动删除。
【解决方案2】:

尝试执行一个提交语句,我相信 SQLite 需要它!您也可以尝试将其全部包装在事务中!

【讨论】:

  • 正如你所说,我尝试进行交易,但我得到了相同的结果。当程序运行时,我可以看到表格中的变化。但是,当我关闭它然后重新打开它时,我看不到我在交易中添加的新数据。还有其他想法吗?
  • 当你不使用BEGIN/END TRANSACTION 命令时,SQLite 会在每个命令之后自动提交。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多