SqlDataAdapter.Update(数据表)不工作(不更新数据库)

Posted

技术标签:

【中文标题】SqlDataAdapter.Update(数据表)不工作(不更新数据库)【英文标题】:SqlDataAdapter.Update (data table) is not working (not updating the database) 【发布时间】:2016-04-05 16:34:30 【问题描述】:

我有下面的代码,我试图从 Windows 应用程序中所做的 c# 网格视图更改更新数据库....

代码未更新 SQL Server 数据库。我不确定问题到底发生在哪里。一切似乎都很好......

或者有没有办法再次使用“更新查询语句”来更新数据库表,重点是如何为数据网格视图中的任何值更改编写更新语句?

我认为绑定和选择命令语句可能存在问题...

谁能指出我解决这个问题的正确方向?

public partial class KnowledgeBaseForm : Form

    private SqlDataAdapter SDA = new SqlDataAdapter();
    private DataTable DT = new DataTable();

    private void button_retrievekb_Click(object sender, EventArgs e)
    
        try
        
            con.Open();
            SqlDataAdapter SDA = new SqlDataAdapter(@"SELECT * From Table1", con);

            SDA.Fill(DT);

            bindingsource.DataSource = DT;
            dataGridView.DataSource = bindingsource;

            if (DT.Rows.Count > 0)
            
                dataGridView.Columns[0].DefaultCellStyle.ForeColor = Color.Gray;
                dataGridView.Columns[0].ReadOnly = true;
            
            else
            
                MessageBox.Show("No Knowledge Base Rules Found");
            
        
        catch (Exception ex)
        
            MessageBox.Show("Error : " + ex.Message);
        
        finally
        
            con.Close();
        
       

    private void button_update_Click(object sender, EventArgs e)
    
        if (MessageBox.Show("Do you really want to Update these values?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes)
        
            //binding the datasource with the changes made in the gridview
            bindingsource.DataSource = dataGridView.DataSource;
            DT.AcceptChanges();
            scb = new SqlCommandBuilder(SDA);                 
            SDA.Update((DataTable) bindingsource.DataSource);
            MessageBox.Show("Updates successfully submitted to CoSD");
        
    

【问题讨论】:

在类根中声明您的 DT 对象,如您的 DataAdapter,并在调用 SDA.Update 之前使用 DT.AcceptChanges,测试它,如果它有效,现在让我们来 嗨...我已经按照你说的编辑了代码...但仍然没有工作... 【参考方案1】:

试试这个:

public partial class KnowledgeBaseForm : Form
    
     SqlDataAdapter SDA = new SqlDataAdapter();
     DataTable DT = new DataTable();
     DataSet ds = new DataSet();
    private void button_retrievekb_Click(object sender, EventArgs e)
            

               SDA = new SqlDataAdapter(@"SELECT * From Table1", con);
               ds = new DataSet();
               SDA.fill(ds,"SomeName");
               dataGridView1.DataSource = ds.Tables[0];
            

    private void button_update_Click(object sender, EventArgs e)
          


            if (MessageBox.Show("Do you really want to Update these values?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes)
            
               SqlCommandBuilder builder = new SqlCommandBuilder(SDA);
               SDA.Update(ds,"SomeNme");

            
          
    

【讨论】:

以上是关于SqlDataAdapter.Update(数据表)不工作(不更新数据库)的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataAdapter.Update(数据表)不工作(不更新数据库)

200万条记录的SqlDataAdapter.Update()速度极慢

使用 SqlDataAdapter.Update 方法时复制表行

在 SqlDataAdapter.Update() 中获取错误消息

当 RowState = Modified 时 SQLDataAdapter.Update() 不更新

SqlDataAdapter.Update(dataset) 方法插入新行但不更新现有行