最近遇上一个很让我蛋疼的问题,小弟刚刚学,,别见怪,高手指点啊,谢谢!
我现在先从数据库里面把信息取出来(这里我用的是access)
OleDbConnection conn;
OleDbCommand cmd;
DataTable dt = new DataTable();
OleDbDataAdapter ad;string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source=F:\C#SQL\Visual Studio 2005\Projects\控件测试\控件测试\Resources\Test.mdb;Persist Security Info=True";
conn = new OleDbConnection(strConnection);
cmd = new OleDbCommand("select * from tt", conn);
ad = new OleDbDataAdapter(cmd);
ad.Fill(dt);
dataGridView1.DataSource = dt;比如说我现在用
int n = dataGridView1.CurrentCell.RowIndex;
    dataGridView1.Rows.RemoveAt(n);
OleDbCommandBuilder cb = new OleDbCommandBuilder(ad);
   ad.Update(dt);这样我是可以同步更新数据库;
但是如果我直接用语句操作上面的dt,
dt.Rows.RemoveAt(0);
当这样的时候再用update(dt)更新的却不能更新数据库,,要怎样才能做到直接操作并能同步数据库呢?还有最好能给我解释解释DataAdapter的update方法的原理!!
再次感谢路过并回答的热心人,,嘿嘿

解决方案 »

  1.   

    //获取数据集中的第一张数据表
               // DataTable dt = ds.Tables[0];            //新数据行对象的名字为dr
               // DataRow dr = dt.NewRow();
                //对新数据行中的字段进行赋值
                //dr["ProdType"] = txtProdType.Text;
               // dr["TypeLevel"] = txtTypeLevel.Text;            //将新数据行添加到数据表中
                //ds.Tables[0].Rows.Add(dr);
                           //创建commandbuilder对象,自动匹配da的其他命令属性
                //OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
                //将数据集中的数据更新到数据库中
                //da.Update(ds);
    这是我做的你看哈,看对你有什么帮助
      

  2.   

    貌似有些知道了,,dt.Rows.RemoveAt(0);是不能使commandbuilder对象创建sql语句的,,不过我还想了解一下commandbuilder对于创建sql语句的原理的,可能大多数操作都是可以创建sql语句的,,给一些不能自动创建sql语句的特例就可以了,,呵呵有点贪心,,谢谢,,!
      

  3.   

    dt.Rows.RemoveAt(0)你这样做的结果是没有调用sql语句来删除数据,而是直接删除.这样后面的更新就找不到根据前删除时用的sql语句来产生更新用的sql语句,因为前面根本就没有使用sql