Я получаю «несоответствие типов данных в выражении критериев» с 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;
Использовать _cmd.Parameters.Add (имя, тип) .Value = значение_ вместо _AddWithValue_. в частности, когда вы пытаетесь передать дату в механизм доступа ms-доступа – Steve
спасибо, попробовал это, но это не имело никакого значения (см. обновление) –
Попробуйте пропустить миллисекундную часть 'EventDate', используя' cmd.Parameters.AddWithValue («@ EventDate», DateTime (EventDate.Year, EventDate.Month, EventDate.Day, EventDate.Hour, EventDate.Minute, EventDate.Second)); '. Насколько мне известно, ваша проблема возникает из-за того, как 'OleDbType' обрабатывает параметр DateTime. –