这么大个题目啊
按照.net的设计思想,gridview与内存中DataTable或DataSet对应,再用个数据访问的DataAdaptor联系DataSet和数据库
GridView有变化时,使用DataAdaptor的update就可以将DataSet中的变化更新到数据库这只是简单的说下理论哈,这里头还是大有藏掖的,需要慢慢去体会

解决方案 »

  1.   

    根据我所知的,在C/S开发中,可以将一个DataSet与DataView进行绑定,如果你改变表格里的值,对应的数据源的内容也会同样变化,再用 OleDbDataAdapter的Update函数进行更新保存进数据库
      

  2.   

    给你段代码,在Winform中我们这么用,你试试在B/S中行不行.public int UpdateDataTable(DataSet dataSet, string tableName)
    {
        int num = -1;
        try
        {
            OleDbDataAdapter adapter = new OleDbDataAdapter(string.Format(" SELECT * FROM {0} ", tableName), this.connection);
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
            if (this.transaction != null)
            {
                if (adapter.SelectCommand != null)
                {
                    adapter.SelectCommand.Transaction = this.transaction;
                }
                if (adapter.InsertCommand != null)
                {
                    adapter.InsertCommand.Transaction = this.transaction;
                }
                if (adapter.UpdateCommand != null)
                {
                    adapter.UpdateCommand.Transaction = this.transaction;
                }
                if (adapter.DeleteCommand != null)
                {
                    adapter.DeleteCommand.Transaction = this.transaction;
                }
            }
            adapter.Update(dataSet, tableName);
            num = 1;
        }
        catch (Exception)
        {
            throw;
        }
        return num;
    }
      

  3.   

    我也给个代码
    public partial class Form1 : Form
        {
    Form1数据成员#region Form1数据成员
            private DataTable DT = new DataTable();
            private SqlDataAdapter SDA = new SqlDataAdapter();
    #endregionForm1构造函数#region  Form1构造函数 
            public Form1()
            {
                InitializeComponent();
            }
    #endregion连接数据库显示数据#region  连接数据库显示数据
            private void Form1_Load(object sender, EventArgs e)
            {            SqlConnection conn = new SqlConnection("server=127.0.0.1;database=pubs;uid=sa");
                SqlCommand SCD = new SqlCommand("select * from tables", conn);
                SDA.SelectCommand = SCD;
                SDA.Fill(DT);
                dataGridView1.DataSource = DT;
            }
    #endregion使用Update更新数据库#region  使用Update更新数据库
            private void toolStripButton1_Click(object sender, EventArgs e)
            {
                try
                {
                    SqlCommandBuilder SCB = new SqlCommandBuilder(SDA);                
                    SDA.Update(DT);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return;
                }
                MessageBox.Show("更新成功!");
            }
    #endregion
      

  4.   

    我也是这样做的,怎么老提示:对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。
      

  5.   

    这是我的代码,大家看看有什么问题,总是提示:对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。public partial class Form1 : Form
        {
            string sqlComString = "select * from [User] ";
            string sqlConString = "server=localhost;database=workflowDB;uid=sa;pwd=;";
           
            SqlConnection sqlConnect ;
            
            SqlCommand selectCommand ;
            SqlDataAdapter da=new SqlDataAdapter ();
            DataSet dataset=new DataSet ();
      
            public Form1()
            {
                InitializeComponent();
               
            }        private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                   
                    sqlConnect = new SqlConnection(sqlConString);
                    
                   selectCommand = new SqlCommand(sqlComString);
                selectCommand.Connection = sqlConnect;
               
                da.SelectCommand = selectCommand;
                
                    da.Fill(dataset, "user");
                 
                    BindingSource bindingsource = new BindingSource();
                    dataGrid.DataSource = bindingsource;
                    bindingsource.DataSource = dataset.Tables[0];
                    dataGrid.AutoResizeColumns(
                DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);           
                }
                catch (SqlException g) { MessageBox.Show(g.ToString()); }
                
            }        private void button1_Click(object sender, EventArgs e)
            {
                try
               {
                  SqlCommandBuilder  cm = new SqlCommandBuilder(da);
                    da.Update(dataset,"user");
                }
                catch (SqlException s){ MessageBox.Show(s.ToString()); }
            }
        }
      

  6.   

    代码里的dataGrid就是dataGridView的对象,只是重命名了一下
      

  7.   

    想问一下,这种方式下如果datagridview被用户重新排序了,那么更新还能正确吗?
      

  8.   

    最简单的方法是datagridview变化的时候产生一个事件,这个事件可以使用它的自动更新的方法,都是封装好了的
      

  9.   

    TO tongji_feiweiwei() ::对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。这个提示是因为你的数据库设计有问题 你的表结构不科学
    比如假如你的表没主键或者结构非常复杂等等问题就会出现这个。
      

  10.   

    代码冗余``
    BindingSource bindingsource = new BindingSource();
    dataGrid.DataSource = bindingsource;
    bindingsource.DataSource = dataset.Tables[0];
    改成dataGrid.DataSource = dataset.Tables[0];另外检查一下USER表是否设置有主键``
    跟踪一下dataset 看tables[0]是否为空
      

  11.   

    TO spkl1(柏芝你走吧我放不下韩红就叫我朝伟吧虽然歌唱得像学友) 我觉得一点都不冗余,2005的BindingSource就是专门用来作为中间层,可以处理很多问题
      

  12.   

    我也是这样做的,怎么老提示:对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。有一个sqlbuilding ??因为你的表没有主键,大概是这样
      

  13.   

    To xia0xia0()说得对``我太武断了``呵呵