C# 从列表中的SQLite where Date列中删除<;日期时间>;

C# 从列表中的SQLite where Date列中删除<;日期时间>;,c#,sqlite,C#,Sqlite,使用C#I haveList dates,我需要从我的Trip表中删除Trip.Date在我的日期列表中 我试图使用userstring.Join创建日期的csv并将其作为参数传递,但它创建了一个文本,因此不起作用。所以我被卡住了-我应该创建一个临时表并循环将日期添加到临时表中吗?这在SQLite中可能吗 我的当前(非工作)代码: 上述代码中的错误: SQLiteException:靠近“”:语法错误 我也试过了 StringBuilder sb = new StringBuilder(); s

使用C#I have
List dates
,我需要从我的
Trip
表中删除
Trip.Date
在我的日期列表中

我试图使用user
string.Join
创建日期的csv并将其作为参数传递,但它创建了一个文本,因此不起作用。所以我被卡住了-我应该创建一个临时表并循环将日期添加到临时表中吗?这在SQLite中可能吗

我的当前(非工作)代码:

上述代码中的错误:

SQLiteException:靠近“”:语法错误

我也试过了

StringBuilder sb = new StringBuilder();
sb.Append("DELETE FROM Trip ");
sb.Append("WHERE Date IN (SELECT * FROM ?) ");
与上述错误相同


我想我可以为每个日期添加delete语句,但可能不是最佳做法。

您应该使用
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();
}
使用(SQLiteConnection conn=newsqliteconnection(newsqliteplatformwinrt(),_sqliteDatabasePath))
{
conn.Open();
SQLITECOMAND sqlCommand=新SQLITECOMAND(“,conn”);
List paramNames=新列表();
for(int i=0;i
经过多次尝试和错误后,我决定使用适当数量的
列表日期作为参数建立查询,如下所示:

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();
}
使用(SQLiteConnection conn=newsqliteconnection(newsqliteplatformwinrt(),_sqliteDatabasePath))
{
StringBuilder sb=新的StringBuilder();
某人追加(“从行程中删除”);
sb.附加(“在(?)中的日期);
如果(dates.Count>1)
{
对于(int i=1;i

这工作如预期。

请告诉我们什么不工作?有任何错误吗?@Sebi-我刚刚将其添加到问题中,我刚刚得到错误SQLite命令不包含接受2个参数的构造函数。您可以从Nuget Package Manager安装SQLite。我正在使用。SQLiteCommand类对于构造函数有哪些选项?
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();
}