System.Data.SQLite "IN"查询子句
本文关键字:quot 查询 子句 IN Data System SQLite | 更新日期: 2023-09-27 17:50:50
我正在研究紧凑的框架并使用ADO for sqlite。我的sqlite数据库包含300万条记录。表的结构与中解释的相同这个问题。我正试图使用数据适配器和数据集来解决同一问题中提到的问题。然而,我面临的新问题是,每当我的查询包含"IN"子句中数据适配器的Fill(…)调用不返回。下面是我用来填充数据集的查询和逻辑。
string query = SELECT TimeStamp,Col2,Col3,Col4,Col5,Col6 FROM T1
WHERE (TimeStamp BETWEEN @startDate AND @endDate)
AND Col5 IN {0} ORDER BY TimeStamp DESC LIMIT 0,@dataToRead
请注意IN子句后面的"占位符"。我需要,因为我的IN子句列表将被创建动态。
我正在使用sqlite命令和数据适配器,如下所示
using (SQLiteCommand cmd = _conn.CreateCommand())
{
cmd.Parameters.AddWithValue("@startDate", startDate.Ticks);
cmd.Parameters.AddWithValue("@endDate", endDate.Ticks);
cmd.Parameters.AddWithValue("@dataToRead", dataToRead); //100
StringBuilder inParams = new StringBuilder();
if (true == webRequest && webRequestFilter != WebCategory.All)
{
switch (webRequestFilter)
{
case WebCategory.One:
{
inParams.AppendFormat("({0})", (int)SystemCategory.One);
break;
}
case WebCategory.Two:
{
inParams.AppendFormat("({0},{1},{2})", (int)SystemCategory.Two,
(int)SystemCategory.Three,
(int)SystemCategory.Four);
break;
}
case WebCategory.Three:
{
inParams.AppendFormat("({0})", (int)SystemCategory.Five);
break;
}
case WebCategory.Four:
{
inParams.AppendFormat("({0},{1},{2})", (int)SystemCategory.Six,
(int)SystemCategory.Two,
(int)SystemCategory.Three);
break;
}
}// End Switch
query = string.Format(query, inParams.ToString()); //Append place holder for IN clause
}// End If
cmd.CommandText = query;
DataSet ds = new DataSet();
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
da.Fill(ds); // This call does not return.
}
该查询在Sqlite Shell和同一数据库。
有没有人在紧凑框架中遇到过类似的问题?
你必须在分配你的查询变量作为CommandText和在添加任何其他参数之前构建你的inParams 。我认为它是重置你的参数集合,当你分配给。commandtext属性。将查询变量分配给CommandText必须是您做的第一件事情。