2012-02-14 8 views
1

SQLデータベースにデータを挿入するアプリケーションを作成しました。基本的には、メインフォームから、ユーザーはデータベースに入るデータを求める第2のフォームを開きます。コードは次のようになります。フォームが閉じられた後のSQLのリフレッシュ

 private void submitButton_Click(object sender, EventArgs e) 
     { 
//Get form values 
       try 
       { 
//Open test connection 
       } 
       catch (Exception ex) 
       { 
//Handle errors 
       } 
       finally 
       { 
//Close test connection 
       } 

       //Run the SQL statements 
       try 
       { 
//Inser SQL data 
       } 
       catch (Exception ie) 
       { 
//Handle errors 
       } 
       finally 
       { 
        //Close the connection 
        if (conn.State != ConnectionState.Closed) 
        { 
//Close the connection 
        } 
        //Close the window 
        this.Close(); 
        //Tell the main form to reload SQL data (not working) 
        mainForm firstForm; 
        firstForm = new mainForm(); 
        firstForm.refreshCall(); 

       } 

      } 
     } 

ユーザーは(のsubmitButton)OK当たったとき、データが挿入されているので、基本的に、ウィンドウが閉じられ、そしてrefreshCall()メソッドが呼び出されます。私の方法「refreshCallは」このように、メインフォーム上に出力されたSQLデータを更新することになっている:

public void refreshCall() 
{ 
    SqlConnection conn = new SqlConnection("Data Source=SERVER\\SQL_DB;Initial Catalog=dataTable;Integrated Security=True"); 
    try 
    { 
     conn.Open(); 
     DataSet ds = new DataSet(); 
     SqlDataAdapter adapter = new SqlDataAdapter("SELECT part_num from dbo.Parts", conn); 
     adapter.Fill(ds); 
     this.listParts.DataSource = ds.Tables[0]; 
     this.listParts.DisplayMember = "part_num"; 
     conn.Close(); 
    } 
    catch (SqlException odbcEx) 
    { 
     MessageBox.Show("There was an error connecting to the data source.\nError Code: 1001", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 

} 

ただし、このメソッドが呼び出されたときに、データは私が持っている意味し、非リフレッシュされたままアプリケーションを閉じてリロードして変更を確認してください。私のコードでSQLデータが変更されずに残っている何かが間違っていますか?これを行うより良い方法はありますか?私はまた、フォームが初期化されたときにデータをロードするために、refreshCallから全く同じコードを使用することに注意してください。

ご協力いただきましてありがとうございます。

+2

デバッガをステップ - あなたのSQLの挿入コードは、リフレッシュ呼び出しの前に呼び出されていますか?また、あなたはあなたのSQL挿入コードを投稿できますか?接続/トランザクションが正しく完了している可能性があります。 – tsells

答えて

3

2番目のフォームは、メインフォームの新しいインスタンスを作成しているようです。新しいインスタンスは決して表示されません。あなたはあなたのrefreshCallのためにあなたの既存のメインフォームを取得する必要があります。

+0

既存のフォームでrefreshCallを呼び出す方法はありますか(新しいものを作成するのではなく) –

+0

彼は完全に新しいインスタンスを作成することを逃した - 良いキャッチ... – tsells

1

2番目のフォームを開いたときにメインフォームに次のコードを使用できます。

あなたのfinallyブロックで2番目の形式で、その後
// the ShowDialog will open your second form and then you use your DialogResult 
// from the second form to tell your main form to refresh the data 
yourSecondForm openSecondForm = new yourSecondForm.ShowDialog(); 
if(openSecondForm.DialogResult == DialogResult.OK) 
{ 
    refreshCall() 
} 

finally 
{ 
    //Close the connection 
    if (conn.State != ConnectionState.Closed) 
    { 
     //Close the connection 
    } 
    //Close the window 
    DialogResult = DialogResult.OK; 
} 
関連する問題