更新访问表中的日期时间
我试图将日期时间值插入到数据表中,然后使用 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);
I'm trying to insert a datetime value into a datatable and then use the oledbdataadapter's update(datatable) method to load it into my database.. but i keep getting a "Data type mismatch in criteria expression." error. My access Data types in the table are:
ID Number
Nombre_Proyecto Text
Codigo_Ine_Proy Text
Cliente text
Fecha_Creacion Datetime (short date)
according to access short date is mm/dd/yyy, wich fits with my datetime/toshortdatestring method? i think so at least.
Any help would be appreciated. Here's my code:
Insert OledbCommand fot the data adapter:
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");
Part where i create the datarow on my 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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该只使用
您在 Access 中看到的“格式化日期”。通过 OleDB 进行交互时,您需要使用日期时间而不是格式化字符串。
You should just use
What you see from in the Access is the "formatted date". When interacting thru OleDB you need to use the DateTime and not the formatted string.
这是一个字符串,而不是日期时间!因此不匹配。
newRow["Fecha_Creacion"] = System.DateTime.Now;
您的参数化查询应该为您完成。
如果你想以短日期字符串格式显示你输入的日期(无论在进行格式化的电脑上是什么,请将其获取为日期时间,然后根据需要进行格式化。PS
,如果你想将日期作为字符串传递给数据库中,使用 yyyy-MM-dd 或 yyyyMMdd 格式以外的任何其他格式都只是一个等待发生的错误,除非必须,否则永远不要
在输出日期时将它们转换为字符串 。以某种格式是最后一个操作,当输入它们时,从字符串转换为日期时间是您应该
在注释后编辑的 第一件事。
最简单的解决方案是
Comando.Parameters.Add("@Fecha_Creacion", DbType.DateTime, System.DateTime.Now);
It's a string, not a datetime! hence mismatch.
newRow["Fecha_Creacion"] = System.DateTime.Now;
And your parameterised query should just do it for you.
if you want to show the date you put in there in shortdatestring format (whate ever that is on the pc that does the formatting, get it as a datetime and then format as required.
PS if you want to pass a date as a string to a database, use the formats yyyy-MM-dd or yyyyMMdd. Any other than the universal and unambiguous date formats is just a bug waiting to happen, and never do unless you have to.
Tip when outputting dates, converting them into strings in some format is the last operation, when inputing them, converting to a datetime from the string is the first thing you should do.
Edited after comment
Simplest solution is
Comando.Parameters.Add("@Fecha_Creacion", DbType.DateTime, System.DateTime.Now);