C# System.Data.SQLite问题,带“;在;查询中的子句

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

我正在研究compact框架,并使用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和 相同的数据库


是否有人在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。我想逐行枚举数据集,并想创建上一个问题中提到的对象列表。请参阅更新的代码。