我写了一个DB_Update的代码如下public DataTable DB_Update(string strSql,object[] strValue)
{
    DataTable dt = new DataTable();
    dt = DB_Find(strSql);
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        if (strValue[i] == null)break;
        dt.Rows[0][dt.Columns[i].ColumnName] = strValue[i];
    }
    OleDbDataAdapter Sda = new OleDbDataAdapter(strSql, Properties.Settings.Default.FamilyDBConnectionString);
    OleDbCommandBuilder cmbUpdate = new OleDbCommandBuilder(Sda);
    Sda.Update(dt);
    dt.AcceptChanges();
    return dt;
}
然后点击"更新"按钮后传递相关值如下        private void btUpdate_Click(object sender, EventArgs e)
        {
                object[] txtUpdate = { null, int.Parse(fileID.Text), reciveDate.Text.Trim(), null, aid1.Text.Trim(), reviceCorp.Text.Trim(), filesname.Text.Trim(), count1.Text.Trim(), reviceList.Text.Trim(), typeList.Text.Trim(), null, others.Text.Trim(), null };
                dbconn dt = new dbconn();
                
                dt.DB_Update("select * from CONTACTS where id = " + filesGridView.CurrentRow.Cells["PGkey"].Value, txtUpdate);
        }运行的时候没有报错,但是数据也没有数据库里面去,我看过txtUpdate的值都已经传递过去了
顺便一提,我用的是Access的数据库

解决方案 »

  1.   

     dt.DB_Update("select * from CONTACTS where [id] = " + filesGridView.CurrentRow.Cells["PGkey"].Value, txtUpdate);==============>id是关键字,用一对中括号包括。还有你的 filesGridView.CurrentRow.Cells["PGkey"].Value值是不是数值型呢?是数值的话,是不是有空格什么的,自己好好检查一下。
      

  2.   

    额,PGkey就是id ,sql语句本身没问题, DB_Find(strSql)能返回到查询id的行
      

  3.   

    那就是ACCESS实际已经更新了,但是你查看的并不是那个更新的目录。数据库默认生成在bin/debug文件夹下Access数据库,到那时你查看的数据库是不是其他目录下的数据库呢,你自己检查一下。
      

  4.   

    没有更新到数据库,但是filesGridView里面的数据已经更新filesGridView.AutoGenerateColumns = false;bindingData.DataSource = connData.DB_Find("select * from CONTACTS where CATEGORY_NAME='" + listType.SelectedValue + "'");filesGridView.DataSource = bindingData;
      

  5.   

    你确定if (strValue[i] == null)break;这句话没有在一开始就退出循环,而导致dt的内容没有被修改?