我有一个名为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);
}
答案 0 :(得分:2)
一些事情。
首先,我没有看到您实际将查询传递到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();
}
}
每次运行查询后,这将自动清理。此外,由于连接池,它就像使用全局变量来缓存它们一样快。最后,如果发生错误,您不必担心内存泄漏。
答案 1 :(得分:1)
您没有执行查询。试试这个:
private void button1_Click(object sender, EventArgs e)
{
string txtQuery = "INSERT INTO RECORDS ID VALUES ('" + textBox1.Text + "')";
ExecuteQuery(txtQuery);
}