请您检查以下代码是否有错误导致我在标准表达式' 例外中出现'数据类型不匹配?我似乎无法找到问题的根源......
可以为
record.Date
类型的{p> * DateTime?
明确投放到DateTime
对于程序中的其他用途, * record.Date
设置为可为空。但是 INSERT操作的record.Date
集是从 DateTimePicker 中检索的,因此此方法的record.Date
值永远不应为null 即可。
WHERE
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();
}
}
答案 0 :(得分:13)
所以... [问题已解决]:D
从HERE我学到了
标准表达不匹配的问题是由于 OleDbType分配给用于表示DateTime.Now的参数 调用AddWithValue时的值。
AddWithValue选择的OleDbType是DBTimeStamp,但Access需要 一个OleDbType.Date。
这意味着方便的AddWithValue
在我身上拉了一个快......
感谢@LarsTech和@DJKraze帮助我,尽管演示文稿混乱!
答案 1 :(得分: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;是处理对象的正确方法试试这个我刚刚在我的结尾检查并做了类似的测试工作..
答案 2 :(得分:0)
我认为您也可以使用ToString()将您的日期数据设置为正确的格式,这将被访问接受
insertCommand.Parameters.AddWithValue("@Date", record.Date.ToString("dd-MM-yy"));