Обновление даты и времени в таблице доступа

Я пытаюсь вставить значение 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, а не форматированную строку.

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