我已经使用OLEDB转换了FOX PRO表,并且我在c#中使用表,当我将数据插入表时,它工作正常,但是当我插入日期字段(当前日期)时,它显示错误数据类型不匹配。 / p>
dateformat 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 + "') )";
}
答案 0 :(得分:2)
我强烈怀疑你是choosing the wrong data type的受害者。您绝不应将DateTime
值与string
表示形式存储在一起。只需将{em>直接中的值3>传递给parameterized query。
我的建议;
DBTYPE_DATE
,在.NET端映射System.DateTime
,在参数类型中映射OleDbType.Date
。DateTime.Now
直接传递给参数化查询。答案 1 :(得分:0)
你"转换"是什么意思?使用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();
}