如何使用C#ADO.NET更新excel行?

时间:2017-10-07 09:55:55

标签: c# excel oledb

我正在使用Oledb连接excel表。我的联系很好。插入和检索数据也正常工作。但是当我尝试使用where子句更新excel表中的记录时,我的代码执行成功没有任何错误,但excel行不会更新。

我的代码是:

strQry = @"Update [Guests$] set [FirstName]=@FirstName,[LastName]=@LastName,[Address]=@Address,
[EmailId]=@EmailId,[TelNo]=@TelNo,[MobileNo]=@MobileNo,[FaxNo]=@FaxNo where [GuestId]=@GuestId";

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子句有什么问题吗?

1 个答案:

答案 0 :(得分:0)

经过大量搜索,我终于遇到了我的错误。实际上,参数应与查询中的顺序相同。所以我将参数更改为:

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;

现在这对我来说很好。