2012-06-20 138 views
2

我有一個名爲ID和保存按鈕的文本框。我想簡單地存儲在SQLite數據庫文件中,無論我在文本框中寫入什麼,只要點擊保存按鈕。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); 
    } 

回答

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。良好的發現 - 我發現了無效的SQL,但直到看到其他人發佈了答案之後才錯過了調用ExecuteQuery的失敗。 :-) –

+0

嗨克里斯。我修改了代碼並添加了所有你指出的東西。除了現在,它在sqlcmd.ExecuteNonQuery()中給出錯誤;通過告訴沒有這樣的「記錄」表存在。我粘貼創建數據庫的方法,並在執行查詢方法之前將其創建爲可執行的....您指出問題所在?謝謝 –

+0

沒關係,我把它整理出來了。但是,我看不到保存在file1.db文件中的實際記錄。是因爲他們真的得救了嗎,還是我看錯了地方?謝謝! –

1

您沒有執行查詢。試試這個:

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

是的,克里斯向我指出,謝謝! –