UpdStustrconnClass和UpdStustrconnName都是对应了某张表的完整查询吗?而那对应的表有主键吗?我从没用过SqlCommandBuilder来自动生成update和delete语句,因为我不相信自动生成的会适合我。所以我建议你也不要用它,真的不好用。正确的做法应该是自己写UPDATE语句、DELETE语句,然后设置到UpdStuGrdsqlda.UpdateCommand.CommandText和UpdStuGrdsqlda.DeleteCommand.CommandText上,然后自己添加参数。

解决方案 »

  1.   

    其实你new一个SqlDataAdapter的时候都设置SelectCommand了,何苦呢,我用它的时候就直接这样:            SqlDataAdapter da = new SqlDataAdapter();
                da.UpdateCommand.CommandText = "update table1 set column1=@column1 where id=@id1";
                da.UpdateCommand.Parameters.Add("@column1", SqlDbType.Int,0,"column1");
                da.UpdateCommand.Parameters.Add("@id1", SqlDbType.Int, 0, "id1");
                da.UpdateCommand.Connection = UpdSconn;
      

  2.   

                SqlDataAdapter da = new SqlDataAdapter();
                da.UpdateCommand.CommandText = "update table1 set column1=@column1 where id=@id1";
                da.UpdateCommand.Parameters.Add("@column1", SqlDbType.Int,0,"column1");
                da.UpdateCommand.Parameters.Add("@id1", SqlDbType.Int, 0, "id1");
                da.UpdateCommand.Connection = UpdSconn;
    学习
      

  3.   

    一点那个保存修改的键就弹出这样的对话框
    System.InvalidOperationException:ExecuteReader:CommandText属性尚未初始化
    在System.Data.Common.DbDataAdapter.UpdatingRowStatus(RowUpdtingEvenArgs rowUpdateEvent,DataRow dataRow)
    在System.Data.Common.DbDataAdapter.Updata(DataRow[] dataRows,DataTableMapping tableMapping)
    在System.Data.Common.DbDataAdapter.UpdataFromDataTable(DataTable dataTable ,DataTableMapping tableMapping)
    在System.Data.Common.DbDataAdapter.Updata(DataSet  dataSet ,String scrTable)
      

  4.   

    不错 不过自己写sql语句也不错 不过要写成类才方便 例 写个my_sql类  应用时直接my_sql sql=new my_sql(cmd);
      

  5.   

    把你的UpdStuGrdsqlda.Update()方法和this.UpdClassStudset.GetChanges()方法發出來看看,是不是這個方法裡面出現了問題呀?你把錯誤結果也發出來看看。
      

  6.   

    我的那个系统是先查询的,然后通过查询后,把数据库的数据调到DataGrid中显示,然后进行修改,在DataGrid中是可以修改的,但确更新不了数据库的内容。查询的语句如下
    private void QryStuN_Click(object sender, System.EventArgs e)
    {
    try
    {
                    UpdStustrconnName = "select HuZhu_id as 户主号,HuZhu_name as 姓名,Sex as 性别,Birth as 出生年月,Nation as 民族,XiangZhen_id as 乡镇,Entrance_date as 参保时间,home as 家庭地址,politic as 政治面貌,ID as 身份证号,Job as 职位 from HuZhu where HuZhu_name=" + "'" + this.QryStuName.Text.ToString().Trim() + "'";
    UpdSconn=new SqlConnection(UpdStuconnstr);
    UpdStuGrdsqlda=new SqlDataAdapter(UpdStustrconnName,UpdSconn);
    UpdNameStudset.Clear(); UpdStuGrdsqlda.Fill(UpdNameStudset,"HuZhu");
    UpdStuGrdDg.DataSource=UpdNameStudset.Tables[0];
    }
    catch
    {
    MessageBox.Show("查询失败。","确认");
    }
    }
    //根据户主乡镇查询户主信息
    private void QueryStuClass_Click(object sender, System.EventArgs e)
    {
    try
    {
                    UpdStustrconnClass = "select HuZhu_id as 户主号,HuZhu_name as 姓名,Sex as 性别,Birth as 出生年月,Nation as 民族,HuZhu.XiangZhen_id as 乡镇,Entrance_date as 参保时间,home as 家庭地址,politic as 政治面貌,ID as 身份证号,Job as 职位 from HuZhu,XiangZhen where XiangZhen.XiangZhen_id=HuZhu.XiangZhen_id and XiangZhen.XiangZhen_name=" + "'" + this.QryStuCla.SelectedItem.ToString().Trim() + "'";
    UpdSconn=new SqlConnection(UpdStuconnstr);
    UpdStuGrdsqlda=new SqlDataAdapter(UpdStustrconnClass,UpdSconn);
    UpdClassStudset.Clear(); UpdStuGrdsqlda.Fill(UpdClassStudset,"HuZhu");
    UpdStuGrdDg.DataSource=UpdClassStudset.Tables[0];
    }
    catch
    {
    MessageBox.Show("查询失败。","确认");
    }
    }
      

  7.   

    "select HuZhu_id as 户主号,HuZhu_name as 姓名,Sex as 性别,Birth as 出生年月,Nation as 民族,HuZhu.XiangZhen_id as 乡镇,Entrance_date as 参保时间,home as 家庭地址,politic as 政治面貌,ID as 身份证号,Job as 职位 from HuZhu,XiangZhen where XiangZhen.XiangZhen_id=HuZhu.XiangZhen_id and XiangZhen.XiangZhen_name=" + "'" + this.QryStuCla.SelectedItem.ToString().Trim() + "'"
    你设断点,看这串SQL在数据库里能跑通吗,估计是这个问题.
      

  8.   

    其实我4楼、5楼已经给出正确回答了,楼主你不仔细看怎么行?看不懂的地方问,不要被其他人的回复搞乱的方向。我稍微再详细说下,你最大的错误有二,改掉其中一个都可以让你的程序有可能正常(虽然我个人认为你两个都应该改掉)。
    一、不该使用SqlCommandBuilder自动生成update和delete语句。
    二、不该给查询出来的列随便取中文名,甚至改名都不行,因为修改了查询出来的列名后就无法使用SqlCommandBuilder自动生成update和delete语句,傻瓜的电脑不知道如何去对应列。
      

  9.   

    ADO在更新时,需要指定4个命令入口,分别是selectCommand,insertCommand,deleteCommand和updateCommand,如果不指定就更新不了,而且有运行错误。一般的查询时,只要指定了SqlCommand对象的selectCommand属性就可以了。但是如果需要有更新删除操作,就必须明确指明上述4个命令入口属性。可以参考一下msdn如何设定SqlCommandBuilder对象。