用C#做一个根据ID查NAME,然后更改NAME的窗体程序,修改不了NAME..为什么呢?一按修改按钮最终传到数据库的还是查到的NAME用C#做一个根据ID查NAME,然后更改NAME的窗体程序,
数据选配器成功生成增删改查语句,二个文本框已数据绑定为数据集中相应字段,先是oleDbDataAdapter,然后是生成dadaset dsau,查询是没有问题;可是修改NAME不成功,调试以后发现到这里oleDbDataAdapter1.Update(dsau);的数据集包含修改了NAME的值,可是到 oleDbDataAdapter1.Fill(dsau);这里dsau就重置变成根据ID查到的NAME,而不是修改后的NAME,窗体上也反映了这一情况,为什么呢?
表 authors
au_id  au_lanme
1      aa查询:
private void btnSearch_Click(object sender, System.EventArgs e)
{
oleDbDataAdapter1.SelectCommand.Parameters["au_id"].Value = this.txtau_id.Text;
dsau.Clear();
oleDbDataAdapter1.Fill(dsau); }
private void btnUpdate_Click(object sender, System.EventArgs e)
{

//dsau.Clear();   //这个放在这个函数哪一行都会出错或dsau重置变成根据ID查到的NAME....
this.oleDbDataAdapter1.Update(dsau,"authors");
this.oleDbDataAdapter1.Fill(dsau);


}
另:我调试手写代码也出现相同问题: private void btnSearch_Click(object sender, System.EventArgs e)
{
oleDbDataAdapter1.SelectCommand.Parameters["au_id"].Value = this.txtau_id.Text;
dsau.Clear();
oleDbDataAdapter1.Fill(dsau); } private void btnUpdate_Click(object sender, System.EventArgs e)
{



System.Data.DataTable dt = dsau.Tables["authors"];


for(int i=0;i<dt.Rows.Count;i++)
{
if(dsau.Tables["authors"].Rows[i]["au_id"].ToString()==this.txtau_id.Text) {

dsau.Tables["authors"].Rows[i]["au_lname"] = this.txtau_lname.Text;

}
} this.oleDbDataAdapter1.Update(dsau);
this.oleDbDataAdapter1.Fill(dsau);


}

解决方案 »

  1.   

    dsau=this.oleDbDataAdapter1.Update(dsau); 
    this.oleDbDataAdapter1.Fill(dsau); 
    修改了没有重新赋值的问题吧。
      

  2.   

    你直接用insert into语句试试看行不行
      

  3.   


    //dsau=this.oleDbDataAdapter1.Update(dsau); D:\My Documents\Visual Studio Projects\WindowsApplication1\Form1.cs(269): 无法将类型“int”隐式转换为“WindowsApplication1.dsau”
    其实是dsau重新赋值不了,
    先是oleDbDataAdapter,然后是生成dadaset dsau,查询是没有问题;可是修改NAME不成功,调试以后发现 到这里oleDbDataAdapter1.Update(dsau);的数据集包含修改了NAME的值, 
    可是到 oleDbDataAdapter1.Fill(dsau);这里dsau就重置变成根据ID查到的NAME,而不是修改后的NAME,窗体上也反映了这一情况,为什么呢? 
      

  4.   

    String ii=this.txtau_id.Text;
    String ll=this.txtau_lname.Text;


    { DataRow r = dsau.Tables["authors"].NewRow();

    r["au_id"]=ii;

    r["au_lname"]=ll;

    dsau.Tables["authors"].Rows.Add(r);




    this.oleDbDataAdapter1.Update(dsau);


    this.oleDbDataAdapter1.Fill(dsau);
                     }
    ***********
    Insert成功,但一按修改按钮时,在窗体中两个文本框还是重置为查询到的值
      

  5.   


    我只是用update方法更新数据修配,然后是可以把修改后的新行传到后台的数据库;没有显式用Insert语句
      

  6.   

    我只是用update方法更新数据集,然后是可以把修改后的新行传到后台的数据库;没有显式用Insert语句
    另:贴子修改不了,为什么搞个修改贴子的按钮却不给权限呢?
      

  7.   


    datagrid才可以绑定datasource,这个textbox没有这个属性,只有databinding 属性text中子属性中绑定dsau - authors.au_lname
      

  8.   

    和页面控件绑定并修改,必须加这行代码:testDataSet.Tables[0].Rows[usersBindingSource.Position].BeginEdit();把这行代码放到Page_Load里,然后在按钮事件里加上:testDataSet.Tables[0].Rows[usersBindingSource.Position].EndEdit()其它的就用你开始的代码,就可以更新到数据库了。
      

  9.   

            private void Form1_Load(object sender, EventArgs e)
            {
                this.usersTableAdapter.Fill(this.testDataSet.Users);
                testDataSet.Tables[0].Rows[usersBindingSource.Position].BeginEdit();
            }        private void button1_Click(object sender, EventArgs e)
            {            testDataSet.Tables[0].Rows[usersBindingSource.Position].EndEdit();
                usersTableAdapter.Update(testDataSet);
                testDataSet.AcceptChanges();
                usersTableAdapter.Fill(this.testDataSet.Users);
            }
      

  10.   

    to davidxu1969://testDataSet.Tables[0].Rows[usersBindingSource.Position].EndEdit();
    1.usersBindingSource 这个在代码里具体应该写什么呢? 用户绑定的数据源,可是没有这个属性,是写数据集dsau,还是写数据表表名authors;
    2.而且编译管句报错:
    D:\My Documents\Visual Studio Projects\WindowsApplication1\Form1.cs(236): 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
      

  11.   

    dsau.Tables["authors"].Rows[index].BeginEdit();index是当前记录号。
      

  12.   

    private void Form1_Load(object sender, System.EventArgs e)
    {



    this.oleDbDataAdapter1.Fill(dsau.authors);
    dsau.Tables["authors"].DefaultView.Sort="au_id";
    int index=dsau.Tables["authors"].DefaultView.Find("au_id");             dsau.Tables[0].Rows[index].BeginEdit(); } 在this.oleDbDataAdapter1.Fill(dsau.authors);这句报错
    未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。
    Message "在关键字 'DEFAULT' 附近有语法错误。" string
      

  13.   

    private void btnSearch_Click(object sender, System.EventArgs e)
    {
    oleDbDataAdapter1.SelectCommand.Parameters["au_id"].Value = this.txtau_id.Text; dsau.Clear();
    oleDbDataAdapter1.Fill(dsau);
    this.txtau_lname.Text=dsau.Tables["authors"].Rows[0]["au_lname"].ToString();
    }这个可以解决,不过查询时加上//this.txtau_lname.Text=dsau.Tables["authors"].Rows[0]["au_lname"].ToString();
    有点怪怪的,哪能位仁兄还有更好的"????
      

  14.   

    楼主,你在生成oleDbDataAdapter时,是否加上了一句,
     OleDbCommandBuilder scb = new OleDbCommandBuilder(oleDbDataAdapter1)
    加上这句,你就可以用自动更新了,不需要那么麻烦
      

  15.   

    System.Data.OleDb.OleDbCommandBuilder objCommandBuilder = new System.Data.OleDb.OleDbCommandBuilder(oleDbDataAdapter1); 
    oleDbDataAdapter1.SelectCommand.Parameters["au_id"].Value = this.txtau_id.Text; dsau.Clear();
    oleDbDataAdapter1.Fill(dsau);
    不行
      

  16.   

    修改后要Update(dsau);的哦,要不你只是修改了内存里的表,没有更新到数据库去
      

  17.   

    这个问题最关键的地方是:
    那末在文本框开始接收用户输入前,要有这个语句:
    testDataSet.Tables[0].Rows[行号].BeginEdit();在保存时,Update之前要有:testDataSet.Tables[0].Rows[行号].EndEdit();其它部分都是常用的代码,上面两行需要特殊注意一下。
      

  18.   


            private void btnSearch_Click(object sender, System.EventArgs e)
            {
                string searchStrign="select au_lname from authors where au_id=" +this.txtau_id.Text;
                OleDbDataAdapter oleAdapter = new OleDbDataAdapter(searchStrign, "连接语句");
                DataTable dt = new DataTable();
                oleAdapter.Fill(dt);            if (dt.Rows.Count > 0)
                    this.txtau_lname.Text = dt.Rows[0]["au_lname"].ToString();
            }        private void btnUpdate_Click(object sender, System.EventArgs e)
            {
                string updateString = "update authors set au_lname='" + this.txtau_lname.Text + "' where au_id=" + this.txtau_id.Text;
                OleDbConnection oleCn = new OleDbConnection("连接语句");
                OleDbCommand oleCmd = new OleDbCommand(updateString, oleCn);
                oleCn.Open();
                oleCmd.ExecuteNonQuery();
                oleCn.Close();
            }