C# System.Data.SQLite问题,带“;在;查询中的子句
我正在研究compact框架,并使用ADO for sqlite。我的sqlite数据库由300万条记录组成。表结构与中的解释相同 . 我正在尝试使用数据适配器和数据集来解决同一问题中提到的问题。然而,我面临的新问题是,每当我的查询包含“IN”子句时,数据适配器的Fill(…)调用都不会返回。下面是我用来填充数据集的查询和逻辑C# System.Data.SQLite问题,带“;在;查询中的子句,c#,sqlite,compact-framework,windows-ce,system.data.sqlite,C#,Sqlite,Compact Framework,Windows Ce,System.data.sqlite,我正在研究compact框架,并使用ADO for sqlite。我的sqlite数据库由300万条记录组成。表结构与中的解释相同 . 我正在尝试使用数据适配器和数据集来解决同一问题中提到的问题。然而,我面临的新问题是,每当我的查询包含“IN”子句时,数据适配器的Fill(…)调用都不会返回。下面是我用来填充数据集的查询和逻辑 string query = SELECT TimeStamp,Col2,Col3,Col4,Col5,Col6 FROM T1 WHERE (T
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和
相同的数据库
是否有人在compact framework中遇到过类似的问题?在将查询变量指定为CommandText之前,以及在添加任何其他参数之前,必须先构建inParams。我认为当您分配给.CommandText属性时,它正在重置参数集合。必须首先将查询变量分配给CommandText。能否在using()中发布完整代码?查询是什么?请格式化此格式,以便在定义了连接的位置也不会产生任何假设。。当你拼凑出这样的代码时,很难给出建议。你得到的无限循环和堆栈溢出错误是什么意思?嗨,Dj Kraze,请再次查看帖子。我删除了“无限循环”语句,因为它具有误导性。此外,当应用程序启动时,_conn变量被初始化,并一直保持活动状态,直到应用程序结束。在da.Fill(ds)子句之后,您是否将其绑定到dataGridView之类的对象上。。?另外,如果您有@startDate和@endDate,请显示更多代码。。如何添加这些参数。。您是否有类似以下内容
cmd.Parameters.AddWithValue(SqlParameter(“@startDate”,yourStartDateValue))代码>嗨Dj Kraze,不,我没有绑定到datagrid或data view。我想逐行枚举数据集,并想创建上一个问题中提到的对象列表。请参阅更新的代码。