2012-02-16 2 views
0

У меня есть следующая форма в проекте winform, у меня есть datagridview внутри, и у меня есть кнопка обновления, которую я хочу, нажимая ее, чтобы обновить соответствующую таблицу из изменений datagridview. Ярлык говорит мне, что запись успешно обновилась, но когда я запрашиваю базу данных, она не работает. Любые идеи, пожалуйста? :Обновление базы данных из gridview

   private SqlConnection con; 
    private SqlCommandBuilder scbCust; 
    private SqlCommandBuilder scbOrd; 
    private DataSet dsCommon; 
    private SqlDataAdapter custAdapter; 
     private void MainForm_Load(object sender, EventArgs e) 
    { 
      con = new SqlConnection(ConfigurationManager.ConnectionStrings["EbosPr.Properties.Settings.Database1ConnectionString1"].ConnectionString); 

     // Creating bridge between Server and DataSet 
     custAdapter = new SqlDataAdapter("SELECT * FROM dbo.CustCalls", con); 


     // SqlCommandBuilder that can create Update commands 
     scbCust = new SqlCommandBuilder(custAdapter); 
     con.Open(); 

     // Filling dataset by respective adapter 
     dsCommon = new DataSet(); 
     custAdapter.Fill(dsCommon, "CustCalls"); 


     // Set datagridview datasource 
     dataGridView1.DataSource = dsCommon.Tables["CustCalls"]; 

     con.Close();    
     } 
    private void update_Click(object sender, EventArgs e) 
    { 

       con.Open(); 
     dsCommon.AcceptChanges(); 
     this.custAdapter.UpdateCommand = this.scbCust.GetUpdateCommand(true); 
     int rowCust = this.custAdapter.Update(dsCommon.Tables["CustCalls"]); 


     if (rowCust > 0) 
     { 
      lblMessage.Text = "INFO: Record updated successfully!"; 
     } 
     con.Close(); 
    } 

Это моя строка соединения в app.config

connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" 

ответ

0

бы добавить комментарий, но моя репутация не достаточно высока для этого. В любом случае, если вы переходите и отлаживаете, отображаются обновления, отображаемые в наборе данных до вызова обновления? Мне интересно, если изменения, внесенные в datagridview, не отражаются в наборе данных до того, как будет вызвано обновление. А в инструкции обновления может быть только обновление для всех строк. Когда вы переходите, какое значение rowCust при нажатии на обновление?

1

Я действительно не помню точно, но я думаю, это может быть потому, что вы вызываете AcceptChanges перед обновлением. Вы сообщаете, что DataSet принимает все ваши изменения и изменения, в результате чего ваши обновленные строки имеют RowState of Unchanged. Затем вы делаете свое обновление, но оно говорит: «Эй, эти строки данных не изменились, поэтому обновление не нужно!»

По крайней мере, я думаю, именно так я и помню эту работу.

Это не проверено, но я думаю, что это работает?

DataSet dataSet; 
SqlDataAdapter adapter; 
string connectionString = "my connection string"; 

using (var connection = new SqlConnection(connectionString)) 
{ 
    dataSet = new DataSet(); 
    connection.Open(); 

    adapter = new SqlDataAdapter("SELECT * FROM dbo.MyTable", connection); 
    var commandBuilder = new SqlCommandBuilder(adapter); 

    adapter.Fill(dataSet, "MyTable"); 

    dataGridView1.DataSource = dataSet.Tables["MyTable"]; 
} 

//Whenever you update 
using (var connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    if (adapter.Update(dataSet.Tables["MyTable"]) > 0) 
     lblMessage.Text = "INFO: Record updated successfully!"; 
} 
Смежные вопросы