无法获得算法如何更新数据库中的选定行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);
}
}
让我知道如果我误解了什么,或者如果语法在某处是错误的,因为我无法测试它。
谢谢你的回答。我的数据库中有ID列,但它在datagridview中不可见。将现在您的代码:) –
不幸的是它没有工作:( –
@AdilAliyev如果它没有太多的麻烦,你可以发布代码,你尝试更新你的问题? –