Обновление даты и времени в таблице доступа - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь вставить значение 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 на моей базе данных :

  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 ]

0 голосов
/ 01 февраля 2012

Вы должны просто использовать

newRow["Fecha_Creacion"] = System.DateTime.Now;

То, что вы видите в Access - это «форматированная дата». При взаимодействии через OleDB вам нужно использовать DateTime, а не форматированную строку.

0 голосов
/ 01 февраля 2012
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);

...