2017-10-07 7 views
0

나는 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 절에 문제가 있습니까?

+0

intID 값이 Excel 레코드에 있는지 확인 했습니까? –

+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; 

이제 제대로 작동합니다.

+1

OLE DB .NET 공급자는 CommandType이 Text로 설정된 경우 SQL 문이나 OleDbCommand에서 호출하는 저장 프로 시저에 매개 변수를 전달할 때 명명 된 매개 변수를 지원하지 않습니다. 이 경우 물음표 (?) 자리 표시자를 사용해야합니다. 그래서 당신이 방금 명명 된 매개 변수가 아닌 done.If 매개 변수를 지원했다면 Add 명령의 순서는 문제가되지 않을 것입니다. –