0
サブクエリを持つOleDbCommandを使用して "条件式のデータ型の不一致"が発生します。実際のデータベースはAccessですが、データベースにクエリを提示するまではわかりません。サブクエリでOleDbCommandを使用した "条件式のデータ型の不一致"
DateTime EventDate;
string HT,AT;
int HS,AS;
OleDbCommand cmd
cmd.CommandText = @"INSERT INTO TheTable (EventDate,HT,HS,[AS],[AT])
SELECT top 1 @EventDate,@HT,@HS,@AS,@AT FROM TheTable
WHERE NOT EXISTS (SELECT 1 FROM TheTable WHERE [email protected])";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@EventDate", EventDate);
cmd.Parameters.AddWithValue("@HT", HT);
cmd.Parameters.AddWithValue("@HS", HS);
cmd.Parameters.AddWithValue("@AS", AS);
cmd.Parameters.AddWithValue("@AT", AT);
cmd.Parameters.AddWithValue("@HT2", HT);
サブクエリを削除すると問題なく動作します。私はすべての変数が正しい型であり、有効な値であると確信しています。サブクエリを取り除くとうまくいきます。
OleDbCommandでパラメータが機能しないサブクエリについては何かありますか?
UPDATE:設定日付の種類を試してみましたが、それが答えはサブクエリが最初に評価されていることであるに違い
cmd.Parameters.Add("@EventDate", OleDbType.Date);
cmd.Parameters["@EventDate"].Value = EventDate;
_AddWithValue_の代わりに_cmd.Parameters.Add(name、type).Value = value_を使用します。特にmsアクセスエンジンに日付を渡そうとしたとき – Steve
ありがとう、試してみましたが、違いはありませんでした(更新を参照) –
'cmd.Parameters.AddWithValue(" @ EventDate "を使って' EventDate'のミリ秒部分を省略してみてください。 DateTime(EventDate.Year、EventDate.Month、EventDate.Day、EventDate.Hour、EventDate.Minute、EventDate.Second)); '。私の知るところでは、あなたの問題は、 'OleDbType'が' DateTime'パラメータをどのように扱うかに由来しているようです。 –