我收到以下错误“没有给出一个或多个必需参数的值。”在下面代码的ExceuteNonQuery()行上。
System.Data.OleDb.OleDbConnection finalConnection;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
string sql = null;
finalConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ='c:\\temp\\test.xlsx'; Extended Properties ='Excel 12.0 Xml;HDR=NO';");
finalConnection.Open();
myCommand.Connection = finalConnection;
foreach (VinObject v in VinList)
{
sql = "Update [Sheet1$] set O = ? where S = ?;";
myCommand.Parameters.Add(new OleDbParameter("@amt", v.CostNewAmt));
myCommand.Parameters.Add(new OleDbParameter("@vin", v.VIN));
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
}
finalConnection.Close();
我每次都尝试使用单独的命令,同样的错误。
foreach (VinObject v in VinList)
{
using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ='c:\\temp\\test.xlsx'; Extended Properties ='Excel 12.0 Xml;HDR=No';"))
{
con.Open();
string query = @"UPDATE [Sheet1$] SET O = ? WHERE S = ?";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@param1", v.CostNewAmt);
cmd.Parameters.AddWithValue("@param2", v.VIN);
cmd.ExecuteNonQuery();
con.Close();
}
}
我可以将其修改为插入并插入到新的Excel电子表格中,但对于我的生活,无法使此更新生效。知道我做错了什么吗?谢谢你的帮助。
答案 0 :(得分:1)
您收到错误,因为Excel无法识别列字母别名“O”和“S”。它需要实际的列“name”,它是第一个填充行中单元格的值。如果该单元格中没有有效值,或者您在连接字符串中指定了HDR=NO
,则列将命名为F1
,F2
... Fn
。如果您不确定推断的列名称是什么,请使用OleDbConnection.GetSchema(String,String[])
或OleDbDataReader.GetName(Int32)
检查名称。
由于您在连接字符串中指定了HDR=NO
,因此正确的SQL可能是
"Update [Sheet1$] set F15 = ? where F19 = ?;"
供将来参考,请查看: