2016-11-08 10 views
0

SQL Serverデータベースにデータを挿入しようとしていて、C#WinformsからDatagridViewに表示しようとしています。SqlDataAdapterデータベースを挿入できませんC#winform

[挿入]ボタンをクリックしてもエラーは表示されませんが、データがデータベースに挿入されていないため、Datagridviewは空白になります。

DataGridviewでデータの更新を確認できますが、データベースはVisual StudioのサーバーエクスプローラーのDataBase(画像1)にありません。

一方、Insert Buttonをクリックするとブレークポイントが設定され、42〜46行目にジャンプします.50.ex(picture2)行に直接ジャンプします。編集

picture1

picture2

:私は挿入]ボタンをクリックしたときに 質問は今、DataGridViewのは全く新しいdata.Database 2つだけのデータを挿入し、新たなdata.Butデータベースを更新していません。

編集2 接続文字列AttachDbFilenameを変更しました。 AttachDbFilename=C:\Vis\NO4\WindowsFormsApplication1\App_Dat‌​a\Database1.mdf; 値にはデータベースを挿入できます。ここで

は、接続文字列である:ここで

<add name="con1" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 

は、ここでのForm_Loadとload_grid機能

SqlConnection con; 
    SqlDataAdapter da; 
    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable(); 
    public Form1() 
    { 
     InitializeComponent(); 
     string connectionString = ConfigurationManager.ConnectionStrings["con1"].ConnectionString; 
     con = new SqlConnection(connectionString); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     load_grid(); 
    } 
    public void load_grid() 
    { 
     dt.Clear(); 
     SqlDataAdapter da1 = new SqlDataAdapter(); 
     try 
     { 
      string sql = "SELECT * FROM profile"; 
      con.Open(); 
      da1.SelectCommand = new SqlCommand(sql, con); 
      da1.Fill(ds); 
      da1.Fill(dt); 
      con.Close(); 
      dataGridView1.DataSource = dt; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

です。ここ挿入]ボタン

private void button1_Click(object sender, EventArgs e) 
    { 
     string ac = textBox1.Text; 
     string bd = textBox2.Text; 
     string sex = textBox2.Text; 
     string sql = "INSERT INTO profile(ac,bd,sex)VALUES('" + ac + "','" + bd + "','" + sex + "')"; 
     try 
     { 
      con.Open(); 
      da = new SqlDataAdapter(); 
      da.InsertCommand = new SqlCommand(sql, con); 
      da.InsertCommand.ExecuteNonQuery(); 
      da.Update(dt); 
      MessageBox.Show("INsert success...!!"); 
      load_grid(); 
      con.Close(); 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

は、貸衣装のデザインですテーブル

CREATE TABLE [dbo].[profile] (
[Id] INT   IDENTITY (1, 1) NOT NULL, 
[ac] NVARCHAR (50) NULL, 
[bd] NVARCHAR (50) NULL, 
[sex] NVARCHAR (50) NULL, 
PRIMARY KEY CLUSTERED ([Id] ASC)); 

問題がどこにあるかわからない

+0

は、以下に説明するよう 私はすべてのコードの更新を持って、それを使うのか?私は接続文字列を提供していないのですか? – Munawar

+0

申し訳ありません!私はそれを欠場する。追加されました。ありがとうございます – zhan

答えて

0

Picture2は接続がすでに開いているという例外を示していますので、接続を開く前に次の手順を試してください。接続を閉じる前にload_grid();に電話しています。

編集 - 第二リビジョン:あなたが接続を初期化した

public void load_grid() 
    { 
     dt.Clear(); 
     SqlDataAdapter da1 = new SqlDataAdapter(); 
     try 
     { 
      string sql = "SELECT * FROM profile"; 
      con.Open(); 
      da1.SelectCommand = new SqlCommand(sql, con); 
      da1.Fill(ds); 
      da1.Fill(dt); 
      con.Close(); 
      dataGridView1.DataSource = dt; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (con.State != System.Data.ConnectionState.Closed) 
       con.Close(); 
     } 
    } 


private void button1_Click(object sender, EventArgs e) 
     { 
      string ac = textBox1.Text; 
      string bd = textBox2.Text; 
      string sex = textBox2.Text; 
      string sql = "INSERT INTO profile(ac,bd,sex)VALUES('" + ac + "','" + bd + "','" + sex + "')"; 
      try 
      { 
       con.Open(); 
       da = new SqlDataAdapter(); 
       da.InsertCommand = new SqlCommand(sql, con); 
       da.InsertCommand.ExecuteNonQuery(); 
       da.Update(dt); 
       con.Close(); 
       MessageBox.Show("INsert success...!!"); 
       load_grid();    
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       if (con.State != System.Data.ConnectionState.Closed) 
        con.Close(); 
      } 
     } 
+0

非常にありがとうございます。私は挿入ボタンをクリックした後に更新されています。 しかし、プロファイルテーブルは挿入されず、testとtest1だけが挿入されます。 – zhan

+0

そして、私はquertion.Whatを持っていますconは最初の呼び出しのload grid()関数で閉じられません。 – zhan

+0

最初のクエリまたは2番目のクエリで例外が発生した場合、アプリケーションを終了するまで接続を閉じることはできません。あなたのコードはきれいではない、私は多くの問題を参照してください。私は自分のアンサーチェックを更新し、それでも問題が解決しない場合はお知らせください。 – Munawar

関連する問題