C# Access OleDb Несоответствие типов данных в выражении критериев

Пожалуйста, проверьте следующий код на наличие ошибок, которые приводят к исключению " Несоответствие типов данных в выражении критерия"? Я просто не могу найти источник проблемы...

введите описание изображения здесь

*record.Date обнуляемый DateTime? тип явно приведен к DateTime

*record.Date устанавливается как обнуляемый для других применений в программе. Но record.Date набор для операции INSERT извлекается из DateTimePicker, поэтому record.Date значение для этого метода никогда не должно быть нулевым.

ГДЕ

введите описание изображения здесь

И (если вам интересно)

введите описание изображения здесь


Из моего файла доступа (представление "Дизайн"):

введите описание изображения здесь


Спасибо!


Вот метод AddRecord. Спасибо!

public static int AddRecord(Record record)
{
    OleDbConnection connection = LABMeetingRecordsDB.GetConnection();
    string insertStatement = "INSERT INTO DocumentInfo " +
                             "([FileName], [Date], [Subject], [Type]) " +
                             "VALUES (?, ?, ?, ?)";
    try {
        OleDbCommand insertCommand = new OleDbCommand(insertStatement, connection);
        insertCommand.Parameters.AddWithValue("@FileName", record.FileName);
        insertCommand.Parameters.AddWithValue("@Date", (DateTime)record.Date);
        insertCommand.Parameters.AddWithValue("@Subject", record.Subject);
        insertCommand.Parameters.AddWithValue("@Type", record.getDBType());

        connection.Open();
        insertCommand.ExecuteNonQuery();

        string selectStatement = "SELECT IDENT_CURRENT('DocumentInfo') FROM DocumentInfo";
        OleDbCommand selectCommand = new OleDbCommand(selectStatement, connection);
        int recordID = Convert.ToInt32(selectCommand.ExecuteScalar());

        AddCategory(connection, recordID, record.Category);

        return recordID;

        } catch (OleDbException ex) {
            throw ex;
        } finally {
            connection.Close();
        }
    }

3 ответа

Решение

Итак...[ПРОБЛЕМА РЕШЕНА]:D

ЗДЕСЬ я узнал, что

Проблема несоответствия в выражении критериев связана с тем, что OleDbType назначается параметру, используемому для представления значения DateTime.Now при вызове AddWithValue.

OleDbType, выбранный AddWithValue, является DBTimeStamp, но Access хочет OleDbType.Date.

Это означает, что удобно AddWithValue натянул быстрый на меня...

Спасибо @LarsTech и @DJKraze за помощь, несмотря на путаницу в презентации!

Я думаю, что вы также можете использовать ToString(), чтобы ваши данные даты в правильном формате, который будет принят при доступе

 insertCommand.Parameters.AddWithValue("@Date", record.Date.ToString("dd-MM-yy"));
OleDbConnection connection = LABMeetingRecordsDB.GetConnection();
string insertStatement = "INSERT INTO DocumentInfo " + "([FileName], [Date], [Subject], [Type]) " + "VALUES (?, ?, ?, ?)";
OleDbCommand insertCommand = new OleDbCommand(insertStatement, connection);
insertCommand.CommandType = CommandType.Text;
insertCommand.Parameters.AddWithValue("@FileName", record.FileName);
insertCommand.Parameters.AddWithValue("@Date", (DateTime)record.Date ?? (object)DBNull.Value);
insertCommand.Parameters.AddWithValue("@Subject", record.Subject);
insertCommand.Parameters.AddWithValue("@Type", record.getDBType ?? (object)DBNull.Value);
connection.Open();
try
{
  insertCommand.ExecuteNonQuery();
}
catch(OleDbException e)
{
   LogYourMessage(e.Message);
}

Приведение DBNull.Value в качестве (объекта)DBNull.Value; это правильный способ обработки объекта, попробуйте это, я только что проверил на моем конце и сделал аналогичный тест, который работает..

Другие вопросы по тегам