2017-04-15 68 views
0

使用C#我有List<DateTime> dates,我需要從我的Trip表中刪除,其中Trip.Date在我的日期列表中。從SQLite中刪除列表中的日期列<DateTime>

我正在嘗試用戶string.Join創建一個csv日期並將其作爲參數傳遞,但它創建一個文字,因此不起作用。所以我被卡住了 - 我應該創建一個臨時表,並通過將它們添加到臨時表中的日期來循環?這在SQLite中甚至可能嗎?

我現在的(非工作)代碼:

SQLiteException:近 「?」:從上面的代碼

using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), _sqliteDatabasePath)) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("DELETE FROM Trip "); 
    sb.Append("WHERE Date IN (?) "); 

    conn.Execute(sb.ToString(), 
     new object[] { 
      dates 
     }); 
} 

錯誤語法錯誤

我也嘗試過

StringBuilder sb = new StringBuilder(); 
sb.Append("DELETE FROM Trip "); 
sb.Append("WHERE Date IN (SELECT * FROM ?) "); 

與上面相同的錯誤。

我想我可以爲每個日期附加一條刪除語句,但可能不是最佳實踐。

+0

請告訴我們什麼是行不通的?任何錯誤或某事? – Sebi

+0

@Sebi - 我剛剛將它添加到問題 – Rick

回答

0

大量的試驗和錯誤,我決定使用?適當數量和List<DateTime> dates作爲參數,如下剛剛建立查詢後:

using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), _sqliteDatabasePath)) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("DELETE FROM Trip "); 
    sb.Append("WHERE Date IN (? "); 

    if (dates.Count > 1) 
    { 
     for (int i = 1; i < dates.Count; i++) 
     { 
      sb.Append(", ? "); 
     } 
    } 

    sb.Append(")"); 

    conn.BeginTransaction(); 
    conn.Execute(
     sb.ToString(), 
     dates.Cast<object>().ToArray()); 
    conn.Commit(); 
} 

這按預期工作。

0

您應該使用SQLiteCommand並手動添加所有參數。 一種方式來做到這一點是這樣的:

using (SQLiteConnection conn = new SQLiteConnection(new SQLitePlatformWinRT(), _sqliteDatabasePath)) 
{ 
    conn.Open(); 
    SQLiteCommand sqlCommand = new SQLiteCommand("", conn); 

    List<string> paramNames = new List<string>(); 
    for (int i = 0; i < dates.Count; i++) 
    { 
     paramNames.Add("@date" + i.ToString()); 
     sqlCommand.Parameters.AddWithValue("@date" + i.ToString(), dates[i]); 
    } 
    sqlCommand.CommandText = 
     string.Format("DELETE FROM Trip WHERE Date IN ({0}) ", 
     string.Join(", ", paramNames)); 
    sqlCommand.ExecuteNonQuery(); 
} 
+0

我剛剛得到錯誤SQLiteCommand不包含帶2個參數的構造函數 – Rick

+0

您是否從Nuget Package Manager安裝SQLite?我正在使用[這個軟件包](https://www.nuget.org/packages/System.Data.SQLite)。你的SQLiteCommand類對構造函數有什麼選擇? – granit