c# - SQLite不保存记录

标签 c# sqlite

我有一个名为 ID 的文本框和一个保存按钮。单击“保存”按钮后,我想将我在文本框中写入的任何内容简单地存储在 SQLite 数据库文件中。

代码正在编译,程序正在运行,没有任何错误,但我没有看到我在同一应用程序下创建的数据库文件 (file1.db) 中保存的任何记录。

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    private SQLiteConnection sqlcon;
    private SQLiteCommand sqlcmd;
    private SQLiteDataAdapter dataBase;
    private DataSet dataSet = new DataSet();
    private DataTable dataTable = new DataTable();


    public Form1()
    {
        InitializeComponent();
    }

    private void createDataBase()
    {
       dataBase = new SQLiteDataAdapter();
    }

    private void ExecuteQuery(string txtQuery)
    {            
     using (SQLiteConnection sqlcon = new SQLiteConnection("Data Source=file1.db"))
     {
            using (SQLiteCommand sqlcmd = sqlcon.CreateCommand())
            {
                sqlcon.Open();
                sqlcmd.CommandText = txtQuery;
                sqlcmd.ExecuteNonQuery();
            }
        }
    }

    private void createDataTable()
    {
        dataTable = new DataTable();
        string txtQuery1 = "CREATE TABLE RECORDS ( ID varchar(255))";
        ExecuteQuery(txtQuery1);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string txtQuery2 = "INSERT INTO RECORDS (ID) VALUES ('" + textBox1.Text + "')";
        ExecuteQuery(txtQuery2);
    }

最佳答案

有几件事。

首先,我不知道您实际上在哪里将查询传递给 ExecuteQuery 方法。您需要修改按钮单击方法,如下所示:

protected void button1_Click(object sender, EventArgs e)
{
  string txtQuery = "INSERT INTO RECORDS ID VALUES  ('" + textBox1.Text + "')";
  ExecuteQuery(txtQuery);
}

其次,查询本身看起来很奇怪。通常结构是这样的

INSERT INTO RECORDS(ID) VALUES('myvalue')

您尝试过直接执行吗?

最后,我强烈建议您重写此代码并删除全局连接和命令变量。除了不好的做法之外,您所拥有的可能会泄漏内存并通常会导致其他问题。任何实现 IDisposable 的内容(例如 SQLiteConnection 和 SQLiteCommand)都应该包含在 using 子句中。例如:

using (SQLiteConnection conn = new SQLiteConnection("conn string")) {
  using (SQLiteCommand cmd = conn.CreateCommand()) {
    sqlcmd.CommandText = txtQuery;
    sqlcmd.ExecuteNonQuery();    
  }
}

这将在每个查询运行后自动清理。此外,由于连接池的存在,它的速度就像使用全局变量来缓存它们一样快。最后,如果发生错误,您不必担心内存泄漏。

关于c# - SQLite不保存记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129422/

相关文章:

mysql - sqlite 和 mysql 字段类型?

ios - 如何在其他 View Controller 上的uitableview中显示sqlite数据?

c# - 如何从jquery变量后面的代码中获取属性?

c# - 将 datetimepicker 值传递给 C# 中的 WHERE LIKE 子句

c# - 正则表达式,从分隔字符串中删除重复路径

带有 FMDB 的 iOS SQLite 在仅通过 TestFlight 分发临时构建时不断报告 'out of memory' 错误

database - 如何在 sqlite 表中查找特定主键的所有引用?

mysql - SQLite 和 MySQL 复合索引与单一索引

c# - Windows Form C# Graph Axes Label on both X & Y axes

C# 在两个列表框之间进行相同的选择