C# 如何将c Datetime转换为Foxpro日期

C# 如何将c Datetime转换为Foxpro日期,c#,datetime,visual-foxpro,C#,Datetime,Visual Foxpro,我已经使用OLEDB转换了FOX PRO表格,并且在c中使用了表格,当我将数据插入表格时,它工作正常,但当我插入日期字段Present daydate时,它显示错误数据类型不匹配 日期格式dd/MM/yyyy仅日期无时间 string tdate = datetime.now.tostring("dd/MM/yyyy"); 当我插入到表中时,我传递的是值ctod'+tdate+' string query = "select * from table1 where ordcust='" + a

我已经使用OLEDB转换了FOX PRO表格,并且在c中使用了表格,当我将数据插入表格时,它工作正常,但当我插入日期字段Present daydate时,它显示错误数据类型不匹配

日期格式dd/MM/yyyy仅日期无时间

string tdate = datetime.now.tostring("dd/MM/yyyy");
当我插入到表中时,我传递的是值ctod'+tdate+'

string query = "select * from table1 where ordcust='" + account + "'"; 
OpenConnection(); 
OleDbCommand cmd = new OleDbCommand(query, con);
if (ds.Tables[0].Rows.Count > 0) 
{
   string ordcust = dr[0].ToString(); 
   string ordnum = dr[1].ToString(); 
   DateTime orddate = DateTime.Now; 
   string vara=orddate.ToString("dd/MM/yyyy"); 
   string cs = "insert into resulttable(ordercustomer,ordnumber,orddate) values ('" + ordcust + "','" + ordnum + "', ctod('" + vara + "') )";
}
我强烈怀疑你是暴力的受害者。永远不要将日期时间值与其字符串表示形式一起存储。只需将它们的值直接传递到

我的建议

为OleDb类型定义DBTYPE\ U DATE on,该类型在.NET端映射为System.DateTime,在参数类型中映射为OleDbType.DATE。 现在直接将DateTime传递给参数化查询。 还要注意:

我强烈怀疑你是暴力的受害者。永远不要将日期时间值与其字符串表示形式一起存储。只需将它们的值直接传递到

我的建议

为OleDb类型定义DBTYPE\ U DATE on,该类型在.NET端映射为System.DateTime,在参数类型中映射为OleDbType.DATE。 现在直接将DateTime传递给参数化查询。
还要注意:

使用OLEDB转换FoxPro表是什么意思?您的代码看起来不正确,不仅适用于FoxPro,也适用于任何SQL数据库。无论如何,您都应该使用参数。它看起来像:

using (var con = new OleDbConnection(@"Provider=VFPOLEDB;Data Source=c:\Path To Your Data\"))
{
    string query = "select * from table1 where ordcust=?";
    con.Open();
    OleDbCommand cmd = new OleDbCommand(query, con);
    cmd.Parameters.AddWithValue("p1", account);
    var reader = cmd.ExecuteReader();
    if (reader.Read())
    {
        string ordcust = (string)dr[0];
        string ordnum = (string)dr[1];
        DateTime orddate = DateTime.Now;
        string vara = orddate.ToString("dd/MM/yyyy");
        string cs = "insert into resulttable (ordercustomer,ordnumber,orddate) values (?, ?, ?)";

        var insertCommand = new OleDbCommand(cs, con);
        insertCommand.Parameters.AddWithValue("p1", ordcust);
        insertCommand.Parameters.AddWithValue("p2", ordnum);
        insertCommand.Parameters.AddWithValue("p3", orddate);

        insertCommand.ExecuteNonQuery();
    }
    con.Close();
}

您使用OLEDB转换FoxPro表是什么意思?您的代码看起来不正确,不仅适用于FoxPro,也适用于任何SQL数据库。无论如何,您都应该使用参数。它看起来像:

using (var con = new OleDbConnection(@"Provider=VFPOLEDB;Data Source=c:\Path To Your Data\"))
{
    string query = "select * from table1 where ordcust=?";
    con.Open();
    OleDbCommand cmd = new OleDbCommand(query, con);
    cmd.Parameters.AddWithValue("p1", account);
    var reader = cmd.ExecuteReader();
    if (reader.Read())
    {
        string ordcust = (string)dr[0];
        string ordnum = (string)dr[1];
        DateTime orddate = DateTime.Now;
        string vara = orddate.ToString("dd/MM/yyyy");
        string cs = "insert into resulttable (ordercustomer,ordnumber,orddate) values (?, ?, ?)";

        var insertCommand = new OleDbCommand(cs, con);
        insertCommand.Parameters.AddWithValue("p1", ordcust);
        insertCommand.Parameters.AddWithValue("p2", ordnum);
        insertCommand.Parameters.AddWithValue("p3", orddate);

        insertCommand.ExecuteNonQuery();
    }
    con.Close();
}

你能展示一下你的作品吗?我强烈怀疑您将日期时间值保存为字符串,这是一个坏主意。并且应该是DateTime.Now.ToString,因为C区分大小写。您可以尝试使用.ToString/MM/yyyy H:MM:ss;虽然Soner提到这是个坏主意,但是mySql标签与这个问题有什么关系?你能为你的工作展示一下吗?我强烈怀疑您将日期时间值保存为字符串,这是一个坏主意。并且应该是DateTime.Now.ToString,因为C区分大小写。您可以尝试使用.ToString/MM/yyyy H:MM:ss;尽管Soner提到这是个坏主意,但是mySql标签与这个问题有什么关系呢?string query=select*from table1,其中ordcust='+account+';开放连接;OleDbCommand cmd=新的OleDbCommandquery,con;如果ds.Tables[0].Rows.Count>0{string ORDCUT=dr[0].ToString;string ordnum=dr[1].ToString;DateTime orddate=DateTime.Now;string vara=orddate.ToString/MM/yyyy;string cs=insert-into-ResultableOrderCustomer、ordnumber、orddate值“+ordcust+”、“+ordnum+”、ctod“+vara+”;@chechu使用问题下方的编辑按钮更新此内容。string query=select*from表1,其中ordcust='+account+';OpenConnection;OleDbCommand cmd=new-OleDbCommandquery,con;if-ds.Tables[0].Rows.Count>0{string ordcust=dr[0]。ToString;string ordnum=dr[1].ToString;DateTime orddate=DateTime.Now;string vara=orddate.ToStringdd/MM/yyyy;string cs=insert-into-resultableOrderCustomer、ordnumber、orddate值“+ordcust+”、“+ordnum+”、ctod“+vara+”;@chechu在您的问题中用下面的编辑按钮更新此内容。