SqlConnection myConnection = new SqlConnection(@"连接字符串");
SqlDataAdapter myAdapter = new SqlDataAdapter("select * from Customer", myConnection);
SqlCommandBuilder mybuilder = new SqlCommandBuilder(myAdapter);
DataSet myDataset = new DataSet();
myAdapter.Fill(myDataset, "Customer");
myAdapter.UpdateCommand = mybulider.GetUpdateCommand();   //这句话是后加的,也无法更新
myAdapter.Update(myDataset, "Customer");
myDataset.Tables[0].AcceptChanges();
现在是在一个窗体的datagridveiw和数据库的表绑定,我在窗体的load事件里绑定的,窗体只有一个按钮,上面是这个按钮的click事件代码,怎么就不能更新呢?
数据库用的是.net2005自带的sql2005,就存放在本程序文件夹下,连接都正常,可就是更新不了,哪为高人能给解释一下

解决方案 »

  1.   

    你的Customer表有没有主键?  有主键的话没下面这行也能更新
    myAdapter.UpdateCommand = mybulider.GetUpdateCommand();  //这句话是后加的,也无法更新
      

  2.   

    myAdapter  需要有 insert ,update 和delete command。不知道lz的代码里有没有这些语句。
      

  3.   

    问题时dataset更新了,datagrid每更新把,dataset.refresh()加上
      

  4.   

    我的Customer表有主键啊colaxu(飞翔) 
    myAdapter建立好后不是insert ,update 和delete command语句自动生成吗
    要是自己在建立的话得怎么建啊mabaolin(hello),你在说什么呢啊,首先你语句逻辑就错误了啊,你说dataset更新,datagridview没更新,那意思就是得更新datagridview被,可是你怎么还dataset.refresh()啊,再说我都绑定了,对dataset操作不就等于对datagridview操作吗
      

  5.   

    给你一个例子吧.测试通过,前两天写的,也是别人问的..
    核心就是SqlDataAdapter+SqlCommandBuilder+BindingSource...写了个简单的例子,测试通过:两个按钮,一个"加载",一个"更新",还有一个"DataGridView"using System.Data;
    using System.Data.SqlClient;namespace DataGridViewUpdateToDataBase
    {
        public partial class Form1 : Form
        {
            private SqlDataAdapter sda = new SqlDataAdapter();
            private BindingSource bs = new BindingSource();
            public Form1()
            {
                InitializeComponent();
            }        //加载
            private void btnLoad_Click(object sender, EventArgs e)
            {
                DataBind();
            }        //数据绑定
            private void DataBind()
            {
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                sda = new SqlDataAdapter("select * from studentDetails", con);
                SqlCommandBuilder buider = new SqlCommandBuilder(sda);
                DataSet ds = new DataSet();
                sda.Fill(ds, "student");
                bs .DataSource =ds.Tables ["student"];
                this.dataGridView1.DataSource = bs;
            }        //更新
            private void btnUpdate_Click(object sender, EventArgs e)
            {
                sda.Update((DataTable)bs.DataSource);
            }
        }
    }
      

  6.   

    TO:
    好像以前做过这个
    ls好像差一些东西
    不差,这些足矣..
      

  7.   

    晕了,还是不行,是某些地方出毛病了吧,难道是我的数据库问题
    我的数据库不是sql server2000,是.net里的数据库引擎,sqlexpress2005
    不过不管是什么,我的连接都正常啊
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
                        Application.StartupPath + "\\Database.mdf;Integrated Security=True;User Instance=True");
    这是连接字符串
      

  8.   

    我也是第一次用,不过应该好用啊
    这样的程序,即使在没装sql server2000上也可以用吧
      

  9.   

    靠,疯了
    同样的语句,我用sql server 2000就可以更新
    肯定是sqlexpress2005有什么说头
      

  10.   

    搞不清楚,从来没用过..只对Oracle,sqlserver感兴趣...
      

  11.   

    没有用过sqlexpress2005,代码没有问题就只有通过其它方式找问题了。
      

  12.   

    vb.net中
    myAdapter.Fill(myDataset, "Customer")
    myAdapter.UpdateCommand.connection.close()
    myAdapter.UpdateCommand.connection.open()
    就可以了,也就是说执行sql用的连接断开一下!
    vc.net中不清楚!
    不妨去试试!