2012-01-27 9 views
0

Hy ..チェックボックスに5つの選択肢があります。複数のチェックボックスから選択するにはC#

 string str = string.Empty; 

     foreach (ListItem item in this.checkbox1.Items) 
     { 
      if (item.Selected) 
      { 
       str = str + ","; 
      } 
     } 

     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString); 
     SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values('" + str + "',@cnp,@data,'10')", con); 

     cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]); 
     cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime()); 


     try 
     { 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      Response.Redirect("User11.aspx"); 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine("Error:" + ex); 
     } 
     finally 
     { 
      con.Close(); 
     } 

私の問題は、私は挿入ボタンを打ったとき、それは、ユーザーがチェック値を挿入しないことです:私は「」.Hereは私のコードで区切られた1つのテーブルにチェックインした値を挿入したいです。私は文字列strに値を割り当てる必要があります。その値は何ですか?チェックしています各項目の1 -

+0

「チェックされた値」は何を表していますか?チェックボックスのインデックス(0,1,2 ..)?ボックスがチェックされているかどうか(true、false、true ...)?チェックボックスのテキストラベル(ハム、チーズ、ピーナッツバター...)?何をデータベースに保存しようとしていますか? – adelphus

答えて

3
string str = string.Empty; 

foreach (ListItem item in this.checkbox1.Items) 
{ 
    if (item.Selected) 
    { 
     str = str + ","; 
    } 
} 

問題は、あなただけのデータベースへのコンマのシリーズを書いているので、strが値を持っていないことです。

おそらくitem.Valueのどのオプションが選択されているかを特定するには、文字列に何かを追加する必要があります。だからあなたのコードでは、なります:

if (item.Selected) 
{ 
    str += item.Value + ","; 
} 

それは(文字列は不変です)文字列オブジェクトを毎回再作成する必要があるとして、しかし、このような文字列の連結を使用することは非常に効率的ではありません。したがって、StringBuilderを使用すると、より効率的なコードになります。

また、文字列がコンマで終わっても問題ありませんか?そうでない場合には、削除するのは簡単です:

str = str.TrimEnd(new char[] { ',' }) 
0

変更:

StringBuilder values = new StringBuilder(); 

if (item.Selected) 
{  
    if (sb.Length) > 0 
     values.Append(","); // To ensure that the last char is not a comma after the loop 
    values.Append(item.value); 

} 


SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@str,@cnp,@data,'10')", con); 

追加:

cmd.Parameters.AddWithValue("@str", values.ToString()); 
  1. だから私たちはあなたのように値を渡すことによって可能に得ることができるSQLインジェクションを削除パラメータ。また、ListItemの選択された値を取得するには、Valueプロパティを使用します。

  2. これで、stringbuilderに値を追加するだけです(ストリングビルダを使用する必要はありませんが、リストボックスに値が多い場合はより効率的です)。

  3. はStringBuilderの

+0

ありがとうございました。これは非常に役に立ちましたが、今のように、option1、option2 ..のようにコンマを取得しています。 – user1147188

+0

if(sb.Length)> 0 values.Append( "、") ;これが本質的に何をするのは、追加されるべき別の値がある場合、最初に値が追加されているかどうかをチェックし、それがコンマを必要とする場合はそれをチェックし、最初の値です。 –

0
  • まずからパラメータの値を設定します。ループ内でstringの連結を避けます。 C#の文字列は不変なので、繰り返しごとに新しいメモリを割り当てます。そのためにはStringBuilder()とそのAppend()メソッドを使用してください。

  • 決して、直接文字列をSQLに書き込まないでください。 常にはパラメータを使用します。私はこれを解決することによって、あなたはあまりにも問題が解決される、と考え

    SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values (@stringvalue,@cnp,@data, @tenvalue)", con); 
    
    cmd.Parameters.AddWithValue("@stringvalue", str); 
    cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]); 
    cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime()); 
    

:だからあなたのコードは次のように見えたことがあります。

幸運。

0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace MultipleCheckBoxesApp 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     string _concateString = ""; 
     private void checkBoxButton_Click(object sender, EventArgs e) 
     { 
      List<string> ourList = new List<string>(); 
      if (csharpCheckBox.Checked) 
      { 
       ourList.Add(csharpCheckBox.Text); 
      } 
      if (javaCheckBox.Checked) 
      { 
       ourList.Add(javaCheckBox.Text); 
      } 
      if (cCheckBox.Checked) 
      { 
       ourList.Add(cCheckBox.Text); 
      } 
      if (phpCheckBox.Checked) 
      { 
       ourList.Add(phpCheckBox.Text); 
      } 
      if (cplusCheckBox.Checked) 
      { 
       ourList.Add(cplusCheckBox.Text); 
      } 
      foreach (string checkList in ourList) 
      { 
       _concateString += checkList + " ,"; 
      } 
      if (_concateString == string.Empty) 
      { 
       MessageBox.Show("Nothing Checked", "Error", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      else 
      { 
       MessageBox.Show(_concateString + " has been checked"); 
      } 

      ourList.Clear(); 
      _concateString = string.Empty; 



     } 
    } 
} 
関連する問題