2016-08-08 12 views
2

FoxProからテーブルをC#に取得しようとしています。私は次のステートメントを使用しています。OleDBが10進値を決定できませんでした

sqlCmd.CommandText = @"SELECT ew.ew_pplid, ew.ew_name, ew.ew_from, ew_to, ew.ew_totdays 
         FROM empwork ew 
         INNER JOIN employs emp ON ew.ew_pplid = emp.em_pplid 
         WHERE emp.em_netname NOT LIKE '' 
         AND TRIM(emp.em_netname) <> '' 
         AND emp.em_type <> 2 
         AND ew.ew_from > ?"; 
sqlCmd.Parameters.AddWithValue("pDate", Convert.ToDateTime("01/08/2016")); 

しかし、これまでに見たことがないエラーが発生しています。

The Provider could not determine the Decimal value. For example, the row was just created, the default for the Decimal column was not available, and the consumer had not yet set a new Decimal value.

前にこのエラーを見て誰を持っており、ので、どのように私はこの問題を回避することができますか?

+0

クエリでTRIM()とLIKEを使用すると、Rushmoreに最適化されている可能性は低くなり、大きなデータセットでは遅くなる可能性があります。 –

答えて

1

偽のメッセージで、日付時刻に窒息されている場合、あなたは

AND ew.ew_from > CTOD(?)"; 

とちょうど日付の文字列としてパラメータを経由してわずかな変更をしようとすることができれば

sqlCmd.Parameters.AddWithValue("pDate", "01/08/2016"); 

は、VFPのコマンドCTOD()はCharacter-To-Dateを意味し、あなたがすでに予想されている月/日/年の形式であるため、通過する必要があります。

"ew.ew_totdays"のような別のフィールドに実際に障害が発生した場合は、返されたフィールドをIDキーだけに限定してクエリを更新し、where句だけを残しておくことができます。その後、それが通過する場合は、一度に1つのフィールドを戻します。データのどこかにNULL値があるかもしれません。

すべてのフィールドがOKの場合は、すべてが適用されるまで、WHERE句とストリッピング条件に基づいて一度に1つずつ部分的にクエリを適用する必要があります。

関連する問題