【发布时间】:2017-04-11 06:57:04
【问题描述】:
我在将命令插入现有 DBF 文件时遇到问题。 我的变量 fullPath = "C:\Kasa_NMP\MAT_DAY.dbf"...
运行后我得到:
“System.Data.OleDb.OleDbException”类型的未处理异常 发生在 System.Data.dll
附加信息:INSERT INTO 语句中的语法错误。
当我尝试将 ' ' 放在 fullPath 变量周围时,我得到:
“System.Data.OleDb.OleDbException”类型的未处理异常 发生在 System.Data.dll
附加信息:查询中的语法错误。不完整的查询 子句。
public static void DataTableToDBF(string filePath, string fileName, DataTable dataTable)
{
string fullPath = filePath + fileName + ".dbf";
using (OleDbConnection con = new OleDbConnection(GetConnection(filePath)))
{
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
foreach (DataRow row in dataTable.Rows) // Insert redaka u DBF file
{
string insertCommand = "INSERT INTO " + fullPath + "(datum1, faktura, sifra_dob, sifra, naziv_art, ulaz, izlaz," +
" jed_cijena, duguje, potrazuje, tarifa, rabat, n, pla, op, nab_cijena, porez_pr, sif_kup, time)" +
" VALUES(@datum, @faktura, @sifra_dob, @sifra, @naziv_art, @ulaz, @izlaz, @jed_cijena, @duguje, @potrazuje," +
" @tarifa, @rabat, @n, @pla, @op, @nab_cijena, @porez_pr, @sif_kup, @time)";
cmd.Parameters.AddWithValue("@datum", DateTime.Parse(row["Datum_k"].ToString()).ToShortDateString());
cmd.Parameters.AddWithValue("@faktura", row["Dokument"]);
cmd.Parameters.AddWithValue("@sifra_dob", row["BarKod"]);
cmd.Parameters.AddWithValue("@sifra", row["Sifra"]);
cmd.Parameters.AddWithValue("@naziv_art", row["NazivArtikla"]);
cmd.Parameters.AddWithValue("@ulaz", row["Ulaz"]);
cmd.Parameters.AddWithValue("@izlaz", row["Izlaz"]);
cmd.Parameters.AddWithValue("@jed_cijena", row["Cijena"]);
cmd.Parameters.AddWithValue("@duguje", row["Duguje"]);
cmd.Parameters.AddWithValue("@potrazuje", row["Potrazuje"]);
cmd.Parameters.AddWithValue("@tarifa", row["Tarifa"]);
cmd.Parameters.AddWithValue("@rabat", row["Rabat"]);
cmd.Parameters.AddWithValue("@n", 0);
cmd.Parameters.AddWithValue("@pla", row["Placanje"]);
cmd.Parameters.AddWithValue("@op", row["Operator"]);
cmd.Parameters.AddWithValue("@nab_cijena", row["NabavnaCijena"]);
cmd.Parameters.AddWithValue("@porez_pr", row["Porez"]);
cmd.Parameters.AddWithValue("@sif_kup", row["SifraKomitenta"]);
cmd.Parameters.AddWithValue("@time", row["Vrijeme"]);
cmd.CommandText = insertCommand;
cmd.ExecuteNonQuery();
}
con.Close();
}
}
private static string GetConnection(string path)
{
return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=dBASE IV;";
}
【问题讨论】:
-
把“cmd.CommandText = insertCommand;”在参数之前
-
我怀疑您在某个字段中使用了保留关键字。 - 时间 - 我建议将该词括在方括号 ..., sif_kup, [time])"
-
@Steve 可能就是这样,现在我正在为小领域获得新的例外,但我会弄清楚谢谢 - 你应该把它写成答案......
-
@BugFiner 没有任何区别。
标签: c# insert dbf oledbexception