0

我正在尝试将日期时间值插入数据表,然后使用 oledbdataadapter 的 update(datatable) 方法将其加载到我的数据库中。但我不断收到“标准表达式中的数据类型不匹配”。错误。我的访问表中的数据类型是:

ID Number
Nombre_Proyecto Text
Codigo_Ine_Proy Text
Cliente text
Fecha_Creacion Datetime (short date) 

根据访问短日期是 mm/dd/yyy,这符合我的 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 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);
4

2 回答 2

0
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);

于 2012-02-01T00:06:45.800 回答
0

你应该只使用

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

您在 Access 中看到的是“格式化日期”。通过 OleDB 进行交互时,您需要使用 DateTime 而不是格式化字符串。

于 2012-02-01T00:09:16.260 回答