2012-02-16 12 views
0

私はwinformプロジェクトで次のフォームを持っています。私は内部に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内で行われた変更が、更新が呼び出される前にデータセットに反映されていないのだろうかと思います。そして、更新ステートメントは、すべての行の更新を実行しているだけかもしれません。ステップ実行時に、updateをクリックしたときのrowCustの値は何ですか?

1

私は本当に覚えていませんが、更新前にAcceptChangesを呼び出している可能性が高いと思います。すべての編集と変更を受け入れるようにDataSetに指示すると、更新された行にはRowStateが変更されません。それから、あなたはあなたのアップデートを行いますが、「ねえ、これらのデータ行は変更されていないので、アップデートは必要ありません!

少なくとも、私はこの作業を覚えていると思います。

これはテストされていませんが、これはうまくいくと思いますか?

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!"; 
} 
関連する問題