0

私はコンパクトなフレームワークに取り組んでおり、SQLite に ADO を使用しています。私の 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 と同じデータベースでうまく機能します。

コンパクトなフレームワークで同様の問題に直面した人はいますか?

4

1 に答える 1

0

クエリ変数を CommandText として割り当てる、および他のパラメーターを追加する前に、inParams を構築する必要があります。.CommandText プロパティに割り当てると、 Parameters コレクションがリセットされていると思います。クエリ変数を CommandText に割り当てることは、最初に行う必要があります。

于 2013-01-07T05:43:24.243 に答える