繁体   English   中英

System.Data.SQLite问题与查询中的“ IN”子句

[英]System.Data.SQLite issue with “IN” clause in query

我正在研究紧凑框架,并将ADO用于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属性时,它将重置您的Parameters集合。 将查询变量分配给CommandText必须是您要做的第一件事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM