2016-05-25 11 views
2

これはルーキーのように見える場合は申し訳ありません:3 ...私はC#で多くの経験がありませんが、C#でコーディングするのが本当に好きです。言語。イベントを介して変数を渡すC#

私は、ボタンクリックで得られた値でデータベースに挿入できるように、ボタンクリックで変数を渡そうとしています。私はいくつかのボタンを別の文字列に、製品の値をリサイクルする自然言語のアプローチでこれはそうでしょう:

私は特定の "製品"をクリックすると、変数の製品は、これは私が "数量"ボタンをクリックすると、それは私にこれらの値を持つDBへの挿入を行うプログラムに続いて、数量番号を与えるだろう。しかし、私はクリックしたボタンに応じてこの値をリサイクルする方法には疑問があります。要するに

は、私が持っているコードは以下の通りであるデータベースに挿入された後

private String product; 
    private int quantity; 
    private char prodchosen; 
    private char quantitychosen; 

    private void Product_Click(object sender, EventArgs e) 
    { 
     prodchosen = 'Y'; 
     product = "Beer"; 
    } 


    private void Product2_Click(object sender, EventArgs e) 
    { 
     prodchosen = 'Y'; 
     product = "Juice"; 
    } 

    public void bttn1_Click(object sender, EventArgs e) 
    { 
     quantitychosen = 'Y'; 
     quantity = 1; 
     if (prodchosen == 'Y' && quanitychosen == 'Y') 
     { 
     MySqlConnection mcon = new MySqlConnection("server=localhost;database=***;username=root;password=***"); 
     mcon.Open(); 
     string insert = "INSERT INTO accounts product, quantity VALUES" + product + " , " + quantity; 


     MySqlCommand cmd = new MySqlCommand(insert, mcon); 
     MessageBox.Show("Product was succesfully added"); 
    } 
    else { 
     MessageBox.Show("Quantity and product not recognized"); 
    } 

、これらの値はのGridViewに示しされ、SELECT文のようなコンボボックスselectedIndexの値によって区切られます:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
     clientchosen = 'Y'; 
     client_id = comboBox1.SelectedIndex; 

     MySqlConnection mcon = new MySqlConnection("server=localhost;database=***;username=root;password=***"); 
     mcon.Open(); 

     char open = 'Y'; 

     int selectedIndex = comboBox1.SelectedIndex; 
     Object selectedItem = comboBox1.SelectedItem; 

     string select2 = "SELECT * FROM account where client_id = " + selectedIndex + " and open = " + open; 

     MySqlCommand cmd2 = new MySqlCommand(select2, mcon); 

     object result = cmd.ExecuteNonQuery(); 

    } 

これまでのところ、私はメッセージボックスを表示しないようにしても、成功のインサートを作ることができていない、私はずっとこの問題についてあなたが持っている任意のコメントを感謝します。

+0

挿入クエリが間違っています... INSERT INTO table_nameを使用してください。 VALUES(value1、value2、value3、...); – DDave

+0

それをデバッグするとどうなりますか?エラーがありますか?値の周りに "("と ")"がないSQL文があることを意味します。 –

+0

@ DDave挿入は問題ありません。すべての列にデータを挿入しない場合は、列名を指定する必要があります。かっこを追加すると読みやすくなります。 –

答えて

2

は、私は、データベースに値を挿入し、これが道である。この

SqlConnection dbconnect = new SqlConnection("server=localhost;database=***;username=root;password=***"); 
SqlCommand cmd; 

    try 
    { 
     cmd = new SqlCommand("INSERT INTO accounts(product, quantity) VALUES(@prod, @quan)", dbconnect); 
     cmd.Parameters.AddWithValue("@prod", Your_Text_Box.Text); 
     cmd.Parameters.AddWithValue("@quan", Your_Text_Box.Text); 
     dbconnect.Open(); 
    } 

で試してみてください。うまく動作します。

+0

私はあなたがしていること/示唆していることについていくつかの説明を追加することをお勧めしますか? –

+0

@Njack できます。それが結果を得る方法です。私は通常これのように行くのが好きです。それは、データが挿入されているかどうかをチェックすることです。左上隅には「1」が表示されます。データが挿入されています –

+0

OPがwinform/wpfアプリケーションを持っていると思います。このインスタンスでは 'Response.Write'が無効です。 –

2

あなたのSQLは正しくないと思います。列と値の句にはカッコが必要で、文字列の値には引用符が必要です。これを試してみてください:

string insert = "INSERT INTO accounts(product, quantity) " + 
       "VALUES('" + product + "' , " + quantity + ")"; 
+0

文字列変数であるにもかかわらず、製品が数値である可能性があり、かっこは必要ありません。私は同意するだろう、製品はおそらくアポストロフィを必要とする。 –

0

他の回答を読んだ後でさらに詳しく説明します。パラメータ化されたクエリは素晴らしいアイデアです。なぜそうなのか見てみましょう。

VALUESの後にスペースがないため、SQLは機能しません。それ以降の製品パラメータは認識されず、挿入物は機能しません。

コマンドを実行することはありません。

cmd.ExecuteNonQuery(); 

あなたが好きな場合は、上記のステートメントからの戻り値を取得すること自由に感じて、それを実行する - それが影響を受けた行数を返します。

関連する問題