无法获得算法如何更新数据库中的选定行ms-access

问题描述:

有一个酒店的程序。这里是“到达”宾客代码:无法获得算法如何更新数据库中的选定行ms-access

try 
       { 

        string dtparrival = this.dateTimePicker4.Text.ToString(); 
        string statusarrival = "Arrival"; 

        string strSql = "SELECT * FROM guestreg WHERE g_status = '" + statusarrival + "' AND g_ad = '" + dtparrival + "'"; 


        OleDbCommand cmd = new OleDbCommand(strSql, connection); 
        connection.Open(); 
        cmd.CommandType = CommandType.Text; 
        OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
        DataTable scores = new DataTable(); 
        da.Fill(scores); 
        arrivaldgv.DataSource = scores; 
        /**************************************************************************/ 
        this.arrivaldgv.Columns[0].Visible = false; 
        this.arrivaldgv.Columns["g_totalrate"].Visible = false; 
        this.arrivaldgv.Columns["u_added"].Visible = false; 
        this.arrivaldgv.Columns["u_timeadded"].Visible = false; 
        /**************************************************************************/ 
        this.arrivaldgv.Columns["g_name"].HeaderText = "Name"; //1 
        this.arrivaldgv.Columns["g_surname"].HeaderText = "Surname"; //2 
        this.arrivaldgv.Columns["g_company"].HeaderText = "Company"; //3 
        this.arrivaldgv.Columns["g_ad"].HeaderText = "Arrival Day"; //4 
        this.arrivaldgv.Columns["g_dd"].HeaderText = "Departure Day"; //5 
        this.arrivaldgv.Columns["g_amountofdays"].HeaderText = "Amount of Days"; //6 
        this.arrivaldgv.Columns["g_na"].HeaderText = "Number of Adults"; //7 
        this.arrivaldgv.Columns["g_amountofdays"].HeaderText = "Amount of Days"; //8 
        this.arrivaldgv.Columns["g_room"].HeaderText = "Room Number"; //9 
        this.arrivaldgv.Columns["g_rate"].HeaderText = "Rate"; //10 
        this.arrivaldgv.Columns["g_totalrate"].HeaderText = "Total Rate"; //11 
        this.arrivaldgv.Columns["g_info"].HeaderText = "Information"; //12 
        this.arrivaldgv.Columns["u_added"].HeaderText = "User"; //13 
        this.arrivaldgv.Columns["u_timeadded"].HeaderText = "Time"; //14 
        this.arrivaldgv.Columns["g_status"].HeaderText = "Status"; //15 
        /**************************************************************************/ 
        connection.Close(); 
       } 
       catch 
       { 
        MessageBox.Show("Please, try again."); 
       } 

有数据网格视图在我的应用程序(这里是截图) Screenshot

有“签到”按钮,我想改变的值从“Arrival”到“In House”数据库中的“g_status”。问题在于使用SQL命令和搜索选定行的算法。 下面是代码,但它不工作:(更新)

private void checkinbtn_Click(object sender, EventArgs e) 
    { 
     int selectedrowindex = arrivaldgv.SelectedCells[0].RowIndex; 
     DataGridViewRow selectedRow = arrivaldgv.Rows[selectedrowindex]; 
     string value = Convert.ToString(selectedRow.Cells["g_status"].Value); 

     OleDbDataAdapter adapter; 
     OleDbCommandBuilder cmdBuilder; 
     string checkin = "In House"; 
     DataSet ds = new DataSet(); 
     string sql = "UPDATE guestreg SET g_status = '" + checkin + "'" + " where ID = '" + value + "';"; 
     Int32 i; 
     try 
     { 
      connection.Open(); 
      adapter = new OleDbDataAdapter(sql, connection); 
      cmdBuilder = new OleDbCommandBuilder(adapter); 
      adapter.Fill(ds); 

      for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
      { 
       ds.Tables[0].Rows[i].ItemArray[2] = checkin; 
      } 

      adapter.Update(ds.Tables[0]); 
      connection.Close(); 
      MessageBox.Show("Data updated ! "); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error:  " + ex); 
     } 
    } 

这里是数据库结构:screenshot

在此先感谢。

是否有任何包含数据的唯一ID(数据库主键)的列?

如果是的话,你可以使用:

int selectedrowindex = arrivaldgv.SelectedCells[0].RowIndex; 
DataGridViewRow selectedRow = arrivaldgv.Rows[selectedrowindex]; 
string value = Convert.ToString(selectedRow.Cells["corresponding column name"].Value); //maybe the first invisible column? 

string sql = "UPDATE guestreg SET g_status = '"+checkin+"'" + " where *name of primary key* = '" + value + "';"; 

而且,这里是一个简单的执行SQL命令的方式:

private void checkinbtn_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     var cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "UPDATE guestreg SET g_status='In House' where *name of primary key*[email protected]"; 
     cmd.Parameters.AddWithValue("@id", value); 
     cmd.Connection = connection; 
     connection.Open(); 
     cmd.ExecuteNonQuery(); 
     { 
      MessageBox.Show("Update Success!"); 
      connection.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error:  " + ex); 
    } 
} 

让我知道如果我误解了什么,或者如果语法在某处是错误的,因为我无法测试它。

+0

谢谢你的回答。我的数据库中有ID列,但它在datagridview中不可见。将现在您的代码:) –

+0

不幸的是它没有工作:( –

+0

@AdilAliyev如果它没有太多的麻烦,你可以发布代码,你尝试更新你的问题? –