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