2012-07-07 61 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