5

次のコードで、 「条件式のデータ型が一致しません」という例外が発生するエラーを確認してください。問題の原因を見つけることができないようです...

ここに画像の説明を入力

* record.Datenull 許容DateTime?型は明示的にキャストされますDateTime

*record.Dateは、プログラム内の他の用途のために nullable として設定されます。ただし、INSERT 操作record.DateのセットはDateTimePickerから取得されるため、このメソッドの値をnull にすることはできませんrecord.Date

どこ

ここに画像の説明を入力

AND (ご不明な点がある場合)

ここに画像の説明を入力


Access ファイル (デザイン ビュー) から:

ここに画像の説明を入力


ありがとうございました!


これが 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();
        }
    }
4

3 に答える 3

0
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 としてキャストします。オブジェクトを処理する正しい方法ですこれを試してください。私は自分の側で確認し、同様のテストを行いました..

于 2014-09-09T18:43:58.783 に答える
0

ToString() を使用して、日付データをアクセスで受け入れられる正しい形式にすることもできると思います

 insertCommand.Parameters.AddWithValue("@Date", record.Date.ToString("dd-MM-yy"));
于 2015-02-20T14:00:52.467 に答える