2013-06-05 244 views
0

我在c#中有一个datagridview,我用我想要的数据库中的任何表填充它,从文本框中获取表名。一切都很好,直到我试图将我在datagridview中做的更改提交到数据库。通过dataGridView更新数据库

button2是我将用于更新的按钮。我搜遍了所有,显然更新适配器应该工作,但它不在这种情况下,我不明白为什么。这里是我的代码:

public partial class Form1 : Form 
{ 
    static string connstr = "DataSource=localhost;Database=sc2db;Trusted_Connection=True;"; 
    SqlConnection conn = new SqlConnection(connstr); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlDataAdapter adap = new SqlDataAdapter(); 
      DataTable dt = new DataTable(); 
      //BindingSource bs = new BindingSource(); 
      SqlCommand comm = new SqlCommand("select * from " + textBox1.Text, conn); 
      adap.SelectCommand = comm; 
      dataGridView1.DataSource = dt; 
      adap.Fill(dt); 
     } 

     catch (Exception ex) 
     { 
      label1.Text = ex.Message; 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlDataAdapter adap = new SqlDataAdapter(); 
      DataTable dt = new DataTable(); 
      BindingSource bs = new BindingSource(); 
      adap.Update(dt); 
     } 

     catch (Exception ex) 
     { 
      label1.Text = ex.Message; 
     } 
    } 
} 
+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

我会记住这一点。我的道歉,我在这里比较新。 – icarus

+1

我写了一篇关于此的帖子。可能这会帮助你http://yadavsachin.wordpress.com/2012/07/31/save-dataset-changes-to-database-in-c/ – Sachin

回答

1

你在button2_Click事件处理程序没有任何命令(SelectCommand中,的DeleteCommand,将InsertCommand和更新命令)初始化adap。那么它如何更新?

你显然不明白DataAdapter是如何工作的。 DataAdapter有4个Command,它们是SelectCommand,DeleteCommand,InsertCommand,UpdateCommand。方法Fill()需要SelectCommand才能正常工作。 Update()方法需要其他命令,当然在DataRows可以具有各种状态的一般情况下:DataRowState.Deleted,DataRowState.Added,DataRowState.Modified。 SelectCommand还需要使用CommandBuilder(在SqlClient中,即SqlCommandBuilder)自动构建其他命令。在Update()方法中传递一个DataTable后,将浏览该表中的所有行并检查每个DataRow的状态,以查看该行是否被添加,删除或修改,并且适配器将调用相应的Command(InsertCommand ,DeleteCommand和UpdateCommand),它必须执行数据库的实际操作。

在你的情况,你可以尝试声明你adap公共和使用SqlCommandBuilder建立它的其他命令调用方法Update()这样前:

SqlCommandBuilder cb = new SqlCommandBuilder(adap); 

请记住,使用SqlCommandBuilder()将只能用于单个表在Select查询中,如果涉及多个表,则必须为DataAdapter构建自己的命令。这并不困难,您可能想要更多地了解如何为DataAdapter构建命令。

我希望能帮助你开始!

0
private void button3_Click(object sender, EventArgs e) 
     { 
      scb = new SqlCommandBuilder(sqlDataAdapter1); 
      sqlDataAdapter1.Update(dataSetUser); 
     } 

IM能够通过这个代码编辑从GridView的我的数据库