2017-10-07 12 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によって呼び出されるストアドプロシージャにパラメータを渡すための名前付きパラメータをサポートしていません。この場合、疑問符(?)のプレースホルダを使用する必要があります。 名前付きパラメータではなく疑問符を使用していても、名前付きパラメータをサポートしていれば、Addコマンドの順序に問題はありません。 –

関連する問題