title: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records
body: <p>I am new to c# and try to bind a datagridview to a mssql database in visual studio 2010.
  The databindings are OK and everything seems to work. Except for a few strange errors:</p>
  
  <p>I get the error in the subject after:
  updating the same row 2 times, 
  deleting a new inserted row, 
  after updating a row when an other row was deleted (word changes to DeleteCommand)</p>
  
  <p>None of the solutions I found on Google workes for me. I hope someone can help me with this. Here is te code:</p>
  
  <pre><code>    private void fillDatagrid()
          {
              //fill datagrid ADO.NET
              conn = new SqlConnection(TestApp.Properties.Settings.Default.TestdatabaseConnectionString);
              cmd = conn.CreateCommand();
              conn.Open();
              cmd.CommandText = "SelectFrom";
              cmd.CommandType = CommandType.StoredProcedure;
              cmd.Parameters.Add("@table", SqlDbType.NVarChar, 50).Value = "Countries";
              cmd.Parameters.Add("@filters", SqlDbType.NVarChar, 300).Value = "";
  
              adapt = new SqlDataAdapter(cmd);
              dt = new DataTable();
              adapt.Fill(dt);
              dt.TableName = "Countries";
  
              conn.Close();
  
              BindingSource src = new BindingSource();
              src.DataSource = dt;
              dt.RowChanged += new DataRowChangeEventHandler(dt_RowChanged);
  
              dgDatabaseGrid.DataSource = src;
              dgDatabaseGrid.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
              //dgDatabaseGrid.RowValidating += new DataGridViewCellCancelEventHandler(dgDatabaseGrid_RowValidating);
  
              //disable columns:
              dgDatabaseGrid.Columns[0].Visible = false;
              dgDatabaseGrid.Columns["date_insert"].Visible = false;
              dgDatabaseGrid.Columns["user_insert"].Visible = false;
              dgDatabaseGrid.Columns["date_change"].Visible = false;
              dgDatabaseGrid.Columns["user_change"].Visible = false;
              dgDatabaseGrid.Columns["deleted"].Visible = false;
  
              //auto size last column
              dgDatabaseGrid.Columns["remarks"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
  
  
              SqlCommandBuilder cb = new SqlCommandBuilder(adapt);
          }
  
          void dt_RowChanged(object sender, DataRowChangeEventArgs e)
          {
              try
              {
                  adapt.Update(dt);
              }
              catch (SqlException ex)
              {
                  Debug.WriteLine(ex.Message);
              }
          }
  
  private void dgDatabaseGrid_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
          {
              if (!e.Row.IsNewRow)
              {
  
  
                  DialogResult response = MessageBox.Show("Are you sure?", "Delete row?",
                                       MessageBoxButtons.YesNo,
                                       MessageBoxIcon.Question,
                                       MessageBoxDefaultButton.Button2);
  
                  if (response == DialogResult.Yes)
                  {
  
                      //ipv delete --&gt; deleted=1
                      conn.Open();
                      cmd = conn.CreateCommand();
                      cmd.CommandType = CommandType.StoredProcedure;
                      cmd.CommandText = "DeleteFrom";
                      cmd.Parameters.Add("@table", SqlDbType.NVarChar, 50).Value = "Countries";
                      cmd.Parameters.Add("@id", SqlDbType.Int).Value = e.Row.Cells[0].Value;
                      cmd.ExecuteNonQuery();
                      conn.Close();
  
  
                      //delete from datagrid:
                      dt.Rows[dgDatabaseGrid.SelectedCells[0].RowIndex].Delete();
  
                  }
  
                  //always cancel!
                  e.Cancel = true;
  
              }
          }
  </code></pre>