【发布时间】:2016-07-14 14:06:06
【问题描述】:
有人可以帮忙解决这个问题吗?我已经尝试了很多不同的东西,但我仍然遇到这个错误。错误指向 cmd.ExecuteNonQuery() 行。我现在已经检查了插入字符串一百万次,但我看不出有什么问题。谢谢!
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetPath);
try
{
for (int i = 0; i < listOfDBTables.Count; i++)
{
for (int j = 1; j < listOfDBTables[i].Rows.Count; j++)
//Don't include the header
{
OleDbCommand cmd = new OleDbCommand("INSERT INTO POP(Global Customer, Sold To #, Material #, Material Description, Customer ID, Customer Name, City, State, Country, Market Code, Unit Cost, Invoice Date, [Month], Quantity, UoM, KG, [Year]) Values (@globCust,@soldToNum,@matNum,@matDesc,@custID,@custName,@city,@state,@country,@mktCode,@cost,@invDate,@month,@quantity,@uom,@kg,@year)", myConnection);
cmd.Parameters.AddWithValue("@globCust", listOfDBTables[i].Rows[j][0].ToString());
cmd.Parameters.AddWithValue("@soldToNum", listOfDBTables[i].Rows[j][1].ToString());
cmd.Parameters.AddWithValue("@matNum", listOfDBTables[i].Rows[j][2].ToString());
cmd.Parameters.AddWithValue("@matDesc", listOfDBTables[i].Rows[j][3].ToString());
cmd.Parameters.AddWithValue("@custID", listOfDBTables[i].Rows[j][4].ToString());
cmd.Parameters.AddWithValue("@custName", listOfDBTables[i].Rows[j][5].ToString());
cmd.Parameters.AddWithValue("@city", listOfDBTables[i].Rows[j][6].ToString());
cmd.Parameters.AddWithValue("@state", listOfDBTables[i].Rows[j][7].ToString());
cmd.Parameters.AddWithValue("@country", listOfDBTables[i].Rows[j][8].ToString());
cmd.Parameters.AddWithValue("@mktCode", listOfDBTables[i].Rows[j][9].ToString());
cmd.Parameters.AddWithValue("@cost", listOfDBTables[i].Rows[j][10].ToString());
cmd.Parameters.AddWithValue("@invDate", listOfDBTables[i].Rows[j][11].ToString());
cmd.Parameters.AddWithValue("@month", listOfDBTables[i].Rows[j][12].ToString());
cmd.Parameters.AddWithValue("@quantity", listOfDBTables[i].Rows[j][13].ToString());
cmd.Parameters.AddWithValue("@uom", listOfDBTables[i].Rows[j][14].ToString());
cmd.Parameters.AddWithValue("@kg", listOfDBTables[i].Rows[j][15].ToString());
cmd.Parameters.AddWithValue("@year", listOfDBTables[i].Rows[j][16].ToString());
myConnection.Open();
cmd.ExecuteNonQuery();
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
myConnection.Close();
}
【问题讨论】:
-
将列名包装在 [..] 中。例如:[全球客户]
-
您的提供者只能处理未命名的参数(使用
?) -
我仍然遇到一些错误,但我似乎正在取得进展。将所有列名括在方括号中可能已经成功了。如果我解决了这个问题,我会再次发布。谢谢@MarcusH
-
已解决。我必须将每个列名以及表名括在括号中。谢谢大家!
标签: c# ms-access oledb sql-insert