SqlConnection conn = new SqlConnection("Data Source=OLEDBGHHHD;Database=vv;Integrated Security=True;");
 string sql = "SELECT * FROM kkk ";   SqlDataAdapter sDa = new SqlDataAdapter(sql, conn);   DataSet ds = new DataSet();   DataTable dt = new DataTable();sDa.Fill(ds, "kkk");
ds.Tables[0].Rows[0].ItemArray[0] = "unix";
sDa.Update(ds,"kkk");
我运行这段代码后 发现数据中的内容没有改变  程序也没有报错 为什么?通过ds向数据库UPdata不是这样写的代码吗?

解决方案 »

  1.   


    DataSet dataSet = new DataSet();using (OleDbConnection connection =new OleDbConnection(connectionString))
    {
    connection.Open();
    OleDbDataAdapter adapter =new OleDbDataAdapter();
    adapter.SelectCommand =new OleDbCommand(queryString, connection);
    OleDbCommandBuilder builder =new OleDbCommandBuilder(adapter);adapter.Fill(dataSet);// Code to modify data in the DataSet here.// Without the OleDbCommandBuilder, this line would fail.
    adapter.UpdateCommand = builder.GetUpdateCommand();
    adapter.Update(dataSet);
      

  2.   

    用这个,这个更标准些!!
    SqlDataAdapter dataAdpater = new SqlDataAdapter(
       "SELECT CategoryID, CategoryName FROM Categories", connection);dataAdpater.UpdateCommand = new SqlCommand(
       "UPDATE Categories SET CategoryName = @CategoryName " +
       "WHERE CategoryID = @CategoryID" , connection);dataAdpater.UpdateCommand.Parameters.Add(
       "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
      "@CategoryID", SqlDbType.Int);
    parameter.SourceColumn = "CategoryID";
    parameter.SourceVersion = DataRowVersion.Original;DataSet dataSet = new DataSet();
    dataAdpater.Fill(dataSet, "Categories");   DataRow row = dataSet.Tables["Categories"].Rows[0];
    row ["CategoryName"] = "New Category";dataAdpater.Update(dataSet, "Categories");
    ' Assumes connection is a valid SqlConnection.
    Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
      "SELECT CategoryID, CategoryName FROM Categories", connection)adapter.UpdateCommand = New SqlCommand( _
      "UPDATE Categories SET CategoryName = @CategoryName " & _
       "WHERE CategoryID = @CategoryID", connection)adapter.UpdateCommand.Parameters.Add( _
       "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName")Dim parameter As SqlParameter = adapter.UpdateCommand.Parameters.Add( _
       "@CategoryID", SqlDbType.Int)
    parameter.SourceColumn = "CategoryID"
    parameter.SourceVersion = DataRowVersion.OriginalDim dataSet As DataSet = New DataSet
    adapter.Fill(dataSet, "Categories")  Dim row As DataRow = dataSet.Tables("Categories").Rows(0)
    row("CategoryName") = "New Category"adapter.Update(dataSet, "Categories")
      

  3.   


            SqlConnection conn = new SqlConnection("Data Source=CHARGEFORWARD;Database=vv;Integrated Security=True;");
            static string sql = "SELECT * FROM kkk ";        SqlDataAdapter sDa = new SqlDataAdapter();               DataSet ds = new DataSet();
            
            DataTable dt = new DataTable();
            SqlCommandBuilder builder = new SqlCommandBuilder();        builder.DataAdapter = sDa;
            ds.Tables[0].Rows[0].ItemArray[0] = "unix";
            sDa.UpdateCommand = builder.GetDeleteCommand();
            sDa.Update(ds,"kkk");
    这样写还是不能更新数据库  为什么????
      

  4.   

    要使用OleDbCommandBuilder 自动生成增删改的命令,数据库的表务必要有主键
      

  5.   


            SqlConnection conn = new SqlConnection("Data Source=CHARGEFORWARD;Database=vv;Integrated Security=True;");
            string sql = "SELECT * FROM kkk ";        SqlDataAdapter sDa = new SqlDataAdapter();               DataSet ds = new DataSet();
            
            DataTable dt = new DataTable();
            SqlCommandBuilder builder = new SqlCommandBuilder();        builder.DataAdapter = sDa;
            ds.Tables[0].Rows[0].ItemArray[0] = "unix";
            sDa.UpdateCommand = builder.GetUpdateCommand();
            sDa.Update(ds,"kkk");这样写哪里有错?  还是不能改变数据库..
      

  6.   

    要用DataSet修改数据库,必须设定DataSet的
    UpdateCommand 、InsertCommand、SelectCommand、DeleteCommand等方可
      

  7.   

    应该加一个ds.AcceptChanges();
            SqlConnection conn = new SqlConnection("Data Source=CHARGEFORWARD;Database=vv;Integrated Security=True;");
            string sql = "SELECT * FROM kkk ";        SqlDataAdapter sDa = new SqlDataAdapter();               DataSet ds = new DataSet();
            
            DataTable dt = new DataTable();
            SqlCommandBuilder builder = new SqlCommandBuilder();        builder.DataAdapter = sDa;
            ds.Tables[0].Rows[0].ItemArray[0] = "unix";
            ds.AcceptChanges();
            sDa.UpdateCommand = builder.GetUpdateCommand();
            sDa.Update(ds,"kkk");
      

  8.   

    在最后一句之前再加上:
    sDa.UpdateCommand.CommandText="Update kkk set …………";//自己补充一下。
      

  9.   


    我整个程序的设计就是为了不加类似的句子! 我把DataSet和DataGridView绑定,然后把DataSet和数据库绑定,这样单击"更新"后直接可以从DataGridView修改数据库的内容,而客户在DataGridView中修改的数据位置是动态的  "Update kkk set …………" 类似的这种句子只能修改一个地方(固定列中的某个值) 不适合我这个程序.
      

  10.   

    看一下这里:http://topic.csdn.net/u/20080918/18/eb7fbb45-1e11-4b93-85a5-3c6370719924.html        DataSet ds = new DataSet(); 
            SqlDataAdapter sda; 
            string constr = "Data Source=***;Initial Catalog=***;Persist Security Info=True;User ID=***;Password=***"; 
            string sql = "select sid,Name,Subject,Result from t_test_b"; 
            sda = new SqlDataAdapter(sql, constr); 
            sda.Fill(ds, "S1"); 
            DataTable dt = ds.Tables["S1"]; 
            SqlCommandBuilder scb = new SqlCommandBuilder(sda); 
            int erows = sda.Update(ds, "S1");注意红色加粗部分,你的可能不对
      

  11.   

    不好意思 刚是别的帖子,回答错误..
     更新下...
     你在SQL.FILL();后面加一句
     SQLCOMMANDBUILDER SQLBUILDER=NEW SQLCOMMANDBUILDER(SQL);
      

  12.   

    这样的问题我教你一个方法,不用求助就可以搞定.那就是使用连接数据库向导,自动帮定到DATAGRID,然后就会自己生成很多有关增加,更新,删除等操作的代码.这个方法是最标准的.也是最简单明了的.