2017-01-02 81 views
0

我在C#中有一個應用程序,數據庫是sqlite(.db3)。我有2個功能。數據庫查詢執行

String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;"; 
private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    saveProject(iProjectID); 
    computeArea(iProjectID); 
} 

public int saveProject(iProjectID) 
{ 
    SQLiteCommand sqlite_cmd; 
    SQLiteCommand sqlite_cmd_PostWork; 
    SQLiteCommand sqlite_cmd_Design; 
    sqlite_conn = new SQLiteConnection(sConnectionString); 
    sqlite_cmd.CommandText = "Delete from prework where pid = " + iProjectID + ";"; 
    sqlite_cmd.ExecuteNonQuery(); 
    sqlite_cmd.CommandText = "Insert into prework (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');"; 
    sqlite_cmd.ExecuteNonQuery(); 
    sqlite_conn.Close(); 
return 1; 
} 

public int computeArea(iProjectID) 
{ 
    SQLiteCommand sqlite_cmd; 
    SQLiteCommand sqlite_cmd_PostWork; 
    SQLiteCommand sqlite_cmd_Design; 
    sqlite_conn = new SQLiteConnection(sConnectionString); 
    sqlite_cmd.CommandText = "Delete from postwork where pid = " + iProjectID + ";"; 
    sqlite_cmd.ExecuteNonQuery(); 
    sqlite_cmd.CommandText = "Insert into postwork (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');"; 
    sqlite_cmd.ExecuteNonQuery(); 
    sqlite_conn.Close(); 
return 1; 
} 

saveProject()函數可以正常工作。 但在computeArea()函數中,查詢不顯示任何錯誤,但數據庫/表不更新/插入/刪除。

如果我第二次調用longitudinalProfileToolStripMenuItem_Click(object sender,EventArgs e),那麼它工作正常。

但在以前的時間裏,它正常工作。 問題是什麼?

+0

什麼是這兩個表的架構?您正在使用字符串連接,除了向您公開SQL注入攻擊外,還會因類型轉換錯誤而中斷連接。如果一個表需要一個字符串,另一個表需要一個浮點數,如果您嘗試輸入帶有意外小數點分隔符的字符串,則第二個表會失敗。 –

+0

順便說一句你的代碼是無效的C#代碼。 'computeArea(iProjectID)'不是有效的函數聲明。實際編譯的郵政編碼,包括任何可能隱藏錯誤的異常處理代碼 –

+0

實際上,如果我單獨調用第二個函數,第二個函數將正常工作。如果我以同樣的方式調用問題,那麼它不會顯示任何錯誤。 @PanagiotisKanavos – Rakib

回答

-2

你可以使用「使用塊」這樣,

String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;"; 
private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    saveProject(iProjectID); 
    computeArea(iProjectID); 
} 

saveProject(iProjectID) 
{ 
    SQLiteCommand sqlite_cmd; 
    SQLiteCommand sqlite_cmd_PostWork; 
    SQLiteCommand sqlite_cmd_Design; 
    using (sqlite_conn = new SQLiteConnection(sConnectionString)) 
    { 
     sqlite_conn.Open(); 
     sqlite_cmd.CommandText = "Delete from prework where pid = " + iProjectID + ";"; 
     sqlite_cmd.ExecuteNonQuery(); 
     sqlite_cmd.CommandText = "Insert into prework (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');"; 
     sqlite_cmd.ExecuteNonQuery(); 
    } 
} 

computeArea(iProjectID) 
{ 
    SQLiteCommand sqlite_cmd; 
    SQLiteCommand sqlite_cmd_PostWork; 
    SQLiteCommand sqlite_cmd_Design; 

    using (sqlite_conn = new SQLiteConnection(sConnectionString)) 
    { 
     sqlite_conn.Open(); 
     sqlite_cmd.CommandText = "Delete from postwork where pid = " + iProjectID + ";"; 
     sqlite_cmd.ExecuteNonQuery(); 
     sqlite_cmd.CommandText = "Insert into postwork (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');"; 
     sqlite_cmd.ExecuteNonQuery(); 
    } 
} 
+0

這是如何解決他的實際問題? –

+0

顯示錯誤「數據庫未打開」錯誤。 – Rakib

+0

我加了「sqlite_conn.Open();」 –

相關問題