如何使用C#ADO.NET更新excel行?
问题描述:
我正在使用Oledb与Excel表连接。我的连接工作正常。插入和检索数据也工作正常。但是,当我尝试使用where子句更新excel表中的记录时,我的代码成功执行而没有任何错误,但excel行不更新。如何使用C#ADO.NET更新excel行?
我的代码是:
strQry = @"Update [Guests$] set [FirstName][email protected],[LastName][email protected],[Address][email protected],
[EmailId][email protected],[TelNo][email protected],[MobileNo][email protected],[FaxNo][email protected] where [GuestId][email protected]";
using (OleDbConnection con = new OleDbConnection(clsConnection.conStr))
{
using (OleDbCommand cmd = new OleDbCommand(strQry,con))
{
cmd.Parameters.Add("@GuestId", OleDbType.Integer).Value = intId;
cmd.Parameters.Add("@FirstName", OleDbType.VarChar, 15).Value = txtFirstName.Text;
cmd.Parameters.Add("@LastName", OleDbType.VarChar, 15).Value = txtLastName.Text;
cmd.Parameters.Add("@Address", OleDbType.VarChar, 200).Value = txtAddress.Text;
cmd.Parameters.Add("@EmailId", OleDbType.VarChar, 50).Value = txtEmail.Text;
cmd.Parameters.Add("@TelNo", OleDbType.VarChar, 20).Value = txtTelNo.Text;
cmd.Parameters.Add("@MobileNo", OleDbType.VarChar, 15).Value = txtMobileNo.Text;
cmd.Parameters.Add("@FaxNo", OleDbType.VarChar, 20).Value = txtFaxNo.Text;
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.ExecuteNonQuery();
MessageBox.Show(strSuccessMsg);
BinddgvGuests();
ClearControls();
}
}
但是当我删除where子句,则所有记录将被更新。
我的where子句有什么问题吗?
答
搜索了很多后,最后我遇到了我的错误。实际上,参数应该与查询中的顺序相同。所以我改变我的参数:
cmd.Parameters.Add("@FirstName", OleDbType.VarChar, 15).Value = txtFirstName.Text;
cmd.Parameters.Add("@LastName", OleDbType.VarChar, 15).Value = txtLastName.Text;
cmd.Parameters.Add("@Address", OleDbType.VarChar, 200).Value = txtAddress.Text;
cmd.Parameters.Add("@EmailId", OleDbType.VarChar, 50).Value = txtEmail.Text;
cmd.Parameters.Add("@TelNo", OleDbType.VarChar, 20).Value = txtTelNo.Text;
cmd.Parameters.Add("@MobileNo", OleDbType.VarChar, 15).Value = txtMobileNo.Text;
cmd.Parameters.Add("@FaxNo", OleDbType.VarChar, 20).Value = txtFaxNo.Text;
cmd.Parameters.Add("@GuestId", OleDbType.Integer).Value = intId;
现在这对我来说工作得很好。
+1
当CommandType设置为Text时,OLE DB .NET Provider不支持将参数传递给SQL语句或由OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。 所以我猜即使你刚刚使用了问号而不是命名参数,你也会完成它。如果它支持命名参数,它将不会成为添加命令的顺序问题。 –
您是否检查过int记录中是否存在intID值? –
是的,值是存在的。 –