2017-05-19 7 views
1

私は5000レコードを含むデータベースを持っています。私は最初の1000を持っていますが、それはヒッチなしで使用されました。しかし、次の90件のレコードでは、JETドライバは一見何の理由もなくこれらをスキップします。Microsoft Jetは90レコードをスキップします

私はこの原因がわかりません。私はその問題が私のSQLコマンドだとは思わない。しかし、私はここにそれがある場合にそれを掲示しています。注意:SQLコマンド用に文字列を追加するのは良い考えではありませんが、私はこの方法でこれを実行することしかできません。

string queryTest = "Select Serial_Number FROM serialNumbers WHERE Is_Used=false AND (In_Progress=false OR Accessed_Time_Stamp < #" + testTime.ToString() + "#);"; 

私は@time、その後setCommand.Parameters.AddWithValue("@time", testTime.ToString());を呼び出すためにtestTime.ToString()を置き換えることができますどのような方法がある場合、私に知らせてくださいしてください。今のところこれは例外を投げています。

メインの質問に戻る。したがって、JETがスキップするこのグループは90レコードです。私はなぜこれが起こっているのか、誰がこのことを知っているのか不思議に思っていました。

私は最近、5000レコードを作成するためにこのテーブルを別のテーブルにマージしたことにも言及する必要があります。はい、この問題は、マージが行われた最初の90の数字のところで起こっています。また、IDは1000から1002にジャンプします。これが何らかの効果をもたらすかどうかはわかりませんが、私はそれに言及したいと思います。

また、私はC#でこれをコーディングしています。

+4

あなたは完全にスキップされていると思いますか、それともちょうど順不同ですか?クエリに指定された順序はありません。何らかの方法でマージした場合、順序が乱れることがあります。 – DancingFool

+0

データベースでは、正しい順序になっています。これは私が作成したMS Accessデータベースで、MS Accessでデータベースを表示できます。私はテストのために前の100のセットでこのクエリコマンドを使用しました。問題なくシリアル番号を取得できました。しかし、それは100が1から100の順であったからかもしれませんが、私は現在のデータベースのIDを見て、それもID順になっています – codingDude

答えて

3

あなたが見ている問題は、データベースに数字が順番に表示されているにもかかわらず、シリアル番号が順不同で参照されるという内部参照がある可能性があると思います。 DancingFoolが示唆しているように、シリアル番号を要求するときにデータベースをソートするには、ORDER BY操作があることを確認する必要があります。このコードでそれを試してみてください。

string queryTest = "Select Serial_Number FROM serialNumbers WHERE Is_Used=false AND (In_Progress=false OR Accessed_Time_Stamp < #" + testTime.ToString() + "#) ORDER BY ID ASC;"; 
+0

ああ、うーん、それは完全にありがとう! – codingDude

0

あなたのSQL文があることを宣言することによって、パラメータを追加することができます。その後、

PARAMETERS AccessTimeStampParam DateTime; 
SELECT Serial_Number 
    FROM serialNumbers 
WHERE Is_Used = false 
    AND (In_Progress = false OR Accessed_Time_Stamp < [AccessTimeStampParam]); 

そしてAccessTimeStampParamパラメータに値を渡します。

関連する問題