使用 OdbcDataAdapter + OdbcCommandBuilder 自動生成 INSERT/UPDATE 指令時,對 Numeric(16,0) 欄位指派 Convert.ToDecimal(10),執行 Update() 拋出:
ERROR [22018] [Microsoft][ODBC Visual FoxPro Driver] Data type mismatch.
Numeric 型別對應有缺陷CommandBuilder 產生的參數型別推斷錯誤,導致驅動程式拒絕資料UPDATE table SET Num=10 卻正常
string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=D:\Data\;Exclusive=No;Collate=Machine;";
using (var conn = new OdbcConnection(connStr))
{
conn.Open();
// INSERT - 直接寫 SQL,避免參數化型別問題
string sql = "INSERT INTO table1 (DateFrom, Num) VALUES ({^2005-09-10}, 10)";
using (var cmd = new OdbcCommand(sql, conn))
{
cmd.ExecuteNonQuery();
}
// UPDATE 同理
string updSql = "UPDATE table1 SET Num = 20 WHERE ID = 1";
using (var cmd = new OdbcCommand(updSql, conn))
{
cmd.ExecuteNonQuery();
}
}
{^YYYY-MM-DD}:標準日期格式 (如 {^2005-09-10}){YYYY-MM-DD}:亦可接受CTOD("2005-09-10"):字串轉日期函式INSERT INTO t1 SELECT * FROM t2 會報錯APPEND FROM 或使用 OLE DB Provider for VFP 9.0Provider=VFPOLEDB.1;Data Source=D:\Data\;VFP 已終止支援 (2015 年),驅動程式僅 32 位元、相容性差。建議將 .dbf 資料遷移至 SQL Server Express / LocalDB / SQLite / PostgreSQL,使用現代 ORM (EF Core/Dapper) 開發,徹底解決驅動程式、並發、編碼、部署等歷史包袱。