2012-04-27 14 views
0

誰かがなぜこの値をデータベースに追加していないのか教えてください。フォームは正常に実行され、エラーは返されません。C#データベースの問題

private void button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection connection = new SqlConnection(); 
     SqlCommand command = new SqlCommand(); 

     connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Documents\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 

     command.Parameters.AddWithValue("@userName", textBox1.Text); 
     command.Parameters.AddWithValue("@passWord", textBox2.Text); 
     command.CommandText = "INSERT INTO Setup (userName, password) VALUES(@userName, @passWord)"; 



     try 
     { 
      connection.Open(); 
      int rowsAffected = command.ExecuteNonQuery(); 

     } 
     catch (Exception ex) 
     { 
      // handle exception 
     } 
     finally 
     { 
      connection.Close(); 
     } 


    } 

FYI:私は "初心者"です。私のデータベースはセットアップと呼ばれています。私は手動で2つのカラムのuserNameともう1つのパスワードをnchar(50)に設定したテーブルを手動で追加しました。

+0

変更は ' – MilkyWayJoe

+2

ヒントmyTable'に挿入'にSetup'に挿入する - それは良いでしょう(短い)へたとえば 'using(){}'を使用します。 - 'using(SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); //ここで作業してください。接続は次の行で閉じます。 } ' – sinelaw

答えて

6

Tableを指定する必要があります(接続文字列で使用されます)。

command.CommandText = "INSERT INTO dbo.myTable (userName, password) VALUES (@userName, @passWord)"; 

そして追加:

command.Connection = connection; 

を接続オブジェクトを使用してCommandオブジェクトを関連付けるために、テーブル名にスキーマの接頭辞を追加しました。

+0

これは残念ながらまだ動作しません。ちょうど私が正しく考えている、一度フォームを実行し、私は '表示テーブルのデータ'をクリックすると、それを閉じた新たに追加された値がそこにあるはずです。 – user1353517

+0

@ user1353517「投稿済み」コードが機能するはずです。あなたのボタンクリックイベントが配線されていることを確認してください。 'button1'をクリックするとコードが実行されますか? – LarsTech

+0

エラーが返っていないので私は推測します – user1353517

1

フォームは正常に動作し、エラーは返されません。

これは、おそらくあなたがそれらを飲み込んでいるためです。あなたのcatch (Exception ex)を取り除く(またはログに記録する)。

一般に、.NET BCLはうまく設計されています。メソッドが機能しない場合、例外が発生します。

[今すぐ]エラー 'ExecuteNonQuery:接続プロパティが初期化されていません。'

右。あなたはSqlCommandSqlConnectionを渡す必要があります:

SqlCommand command = new SqlCommand(); 
command.Connection = connection; 
+0

さて、「ExecuteNonQuery:接続プロパティが初期化されていません」というエラーが表示されます。行int '行の影響を受ける= command.ExecuteNonQuery();'何か案が? – user1353517

+0

@ user1353517 - 回答の編集 –

+0

'system.data.sqlclient.sqlcommand.sqlcommand(string)'に最適なオーバーロードされたメソッドが見つかりました。無効な引数がいくつかあります。 – user1353517

1

あなたのコードは次のようになります。

  • 接続オブジェクトを設定します。
  • @LarsTechが述べたようにテーブル名を指定してください。
  • [Schema name].[Table Name]のようにテーブル名を指定するときは、2つの表記法を使用することをお勧めします。だから、あなたはdbo.MyTable

コードのようなあなたのテーブル名を指定する必要がありスニペット

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection connection = new SqlConnection(); 
    connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Documents\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;"); 

    SqlCommand command = new SqlCommand(); 
    command.Connection = connection; 
    command.CommandText = "INSERT INTO dbo.MyTable (userName, password) VALUES (@userName, @passWord)"; 
    command.Parameters.AddWithValue("@userName", textBox1.Text); 
    command.Parameters.AddWithValue("@passWord", textBox2.Text); 

    try 
    { 
     connection.Open(); 
     int rowsAffected = command.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     //handle exception 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 
+0

ありがとうございますが、それでもデータベースに値を追加しません:( – user1353517

+0

myTableを右クリックするだけでテーブルのデータを表示します – user1353517