Обновление даты и времени в таблице доступа
Я пытаюсь вставить значение datetime в таблицу данных и затем использовать метод обновления (datatable) oledbdataadapter, чтобы загрузить его в мою базу данных... но я продолжаю получать "Несоответствие типов данных в выражении критериев". ошибка. Мой доступ Типы данных в таблице:
ID Number
Nombre_Proyecto Text
Codigo_Ine_Proy Text
Cliente text
Fecha_Creacion Datetime (short date)
в соответствии с короткой датой доступа это мм / дд / ггг, что соответствует моему методу datetime / toshortdatestring? я так думаю по крайней мере.
Любая помощь будет оценена. Вот мой код:
Вставьте OledbCommand для адаптера данных:
sql = "PARAMETERS [@Fecha_Creacion] datetime;INSERT Into [Proyectos] ([ID], [Nombre_Proyecto],[Codigo_Ine_Proy],[Cliente],[Fecha_Creacion]) Values (@ID,@Nombre_Proyecto,@Codigo_Ine_Proy,@Cliente,@Fecha_Creacion)";
Comando = new OleDbCommand(sql, conn);
Comando.Parameters.Add("@Nombre_Proyecto", OleDbType.VarWChar, 500, "Nombre_Proyecto");
Comando.Parameters.Add("@Codigo_Ine_Proy", OleDbType.VarWChar, 500, "Codigo_Ine_Proy");
Comando.Parameters.Add("@Cliente", OleDbType.VarWChar, 500, "Cliente");
Comando.Parameters.Add("@Fecha_Creacion", DbType.DateTime);
Comando.Parameters.Add("@ID", OleDbType.Integer, 10000, "ID");
Часть, где я создаю datarow на моем datatable:
DataRow newRow = Tabla_Proyectos_BD_General.NewRow();
Max_IDs["Proyectos"] += 1;
newRow["ID"] = Max_IDs["Proyectos"];
newRow["Nombre_Proyecto"] = textBox2.Text;
newRow["Codigo_Ine_Proy"] = textBox1.Text;
newRow["Cliente"] = textBox3.Text;
string x = System.DateTime.Now.ToShortDateString();
newRow["Fecha_Creacion"] = x;
Tabla_Proyectos_BD_General.Rows.Add(newRow);
2 ответа
string x = System.DateTime.Now.ToShortDateString();
Это строка, а не дата! следовательно несоответствие.
newRow ["Fecha_Creacion"] = System.DateTime.Now;
И ваш параметризованный запрос должен сделать это за вас.
если вы хотите показать дату, которую вы там указали, в формате короткого списка (что бы ни находилось на компьютере, который выполняет форматирование, получите его как дату и время, а затем отформатируйте, как требуется).
PS Если вы хотите передать дату в виде строки в базу данных, используйте форматы yyyy-MM-dd или yyyyMMdd. Любой, кроме универсальных и однозначных форматов дат, - это просто ошибка, ожидающая того, что произойдет, и никогда этого не произойдет, если это не нужно.
Совет при выводе дат, преобразование их в строки в каком-либо формате является последней операцией, при вводе их преобразование в дату-время из строки - это первое, что вы должны сделать.
Отредактировано после комментария
Comando.Parameters.Add("@Fecha_Creacion", DbType.DateTime, System.DateTime.Now);
Вы должны просто использовать
newRow["Fecha_Creacion"] = System.DateTime.Now;
В Access вы видите "форматированную дату". При взаимодействии через OleDB вам нужно использовать DateTime, а не форматированную строку.