2012-07-07 59 views
-1
 bool ret = false; 
     try 
     { 
      SQLiteConnection sqlConn = new SQLiteConnection("Data Source=" + m_dbName); 
      sqlConn.Open(); 
      SQLiteCommand sqlComm = sqlConn.CreateCommand(); 
      sqlComm.CommandText = "DELETE FROM " + szTablename+" WHERE name="+name+"";    

      SQLiteDataAdapter sqlAdapter = new SQLiteDataAdapter(sqlComm); 

      if (null == sqlAdapter) 
      { 
       ret = false; 
      } 
      else 
      { 
       ret = true; 
      } 
      sqlConn.Close(); 
      return ret; 
     } 
     catch (SQLiteException sqlEx) 
     { 
      Console.WriteLine(sqlEx.Message); 
      return false ; 
     } 

我有該代碼來刪除sqlite數據庫中的一行,但我沒有做完後,我點擊刪除按鈕。SQLite和刪除命令

+0

http://en.wikipedia.org/wiki/SQL_injection – Lee 2012-07-07 11:56:20

+0

特別要注意將用戶輸入格式化爲查詢的注入。對於SqlLite,看看?名稱的參數。 – bryanmac 2012-07-07 12:00:42

+0

我也會建議使用綁定變量而不是字符串連接!看起來更清潔並防止SQL注入。請記住永遠使用綁定變量... – Sven 2013-06-28 06:54:16

回答

1

而不是使用一個DataAdapter的你可以只直接執行命令:

using(SQLiteConnection sqlConn = new SQLiteConnection("Data Source=" + m_dbName)) 
{ 
    sqlConn.Open(); 
    //create command 

    sqlCommand.ExecuteNonQuery(); 
} 

你不應該吞下得到來自ExecuteNonQuery方法拋出的異常除非你能明智地處理它們。您應該使用參數化查詢,而不是通過串聯字符串來手動創建查詢。如圖所示,您還應確保在完成使用後關閉連接。

+0

謝謝,但我仍然不能刪除行 – 2012-07-07 12:31:34

+0

@JoeMo - 我已經更新了答案,直接執行命令直接你似乎沒有使用你需要刪除的'DataSet'。 – Lee 2012-07-07 12:48:26

0

嘗試用單引號:

sqlComm.CommandText = "DELETE FROM " + szTablename+" WHERE name='"+name+"'"; 
+0

謝謝,但沒有它仍然無法工作 – 2012-07-07 11:59:44