2014-12-04 3 views
-1

Я работаю над Windows Form, который имеет элемент управления CheckedListBox (cbIntendedMajor), который я пытаюсь вставить в базу данных Access. Я не возвращаю никаких ошибок, однако, когда я выбираю более одного элемента флажка, только первый из них вставляется в таблицу с запятой. Любые указатели на то, что мне здесь не хватает? Ниже мой код:Visual Studio - Windows Form - CheckedListBox не правильно вставлен. C#

private void button1_Click(object sender, EventArgs e) 
    { 
     string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\Interest.accdb"; 
     OleDbConnection con = new OleDbConnection(conString); 
     OleDbCommand cmd = con.CreateCommand(); 
     string text = "INSERT INTO InterestCard (FirstName, LastName, StreetAddress, City, State, ZipCode, Phone, Email, DOB, Gender, HighSchool, GraduationYear, PlannedTerm, IntendedMajor) VALUES (@FName, @LName, @SAddress, @City, @State, @Zip, @Phone, @Email, @DOB, @Gender, @HSchool, @GradYear, @PTerm, @IMajor)"; 
     cmd.CommandText = text; 

      con.Open(); 
      cmd.Parameters.AddWithValue("@FName", txtFirstName.Text); 
      cmd.Parameters.AddWithValue("@LName", txtLastName.Text); 
      cmd.Parameters.AddWithValue("@SAddress", txtAddress.Text); 
      cmd.Parameters.AddWithValue("@City", txtCity.Text); 
      cmd.Parameters.AddWithValue("@State", txtState.Text); 
      cmd.Parameters.AddWithValue("@Zip", txtZipCode.Text); 
      cmd.Parameters.AddWithValue("@Phone", txtPhone.Text); 
      cmd.Parameters.AddWithValue("@Email", txtEmail.Text); 
      cmd.Parameters.AddWithValue("@DOB", dtpDOB.Value); 
      cmd.Parameters.AddWithValue("@Gender", rbFemale.Checked); 
      cmd.Parameters.AddWithValue("@HSchool", txtHighSchool.Text); 
      cmd.Parameters.AddWithValue("@GradYear", txtGraduationYear.Text); 
      cmd.Parameters.AddWithValue("@PTerm", txtTermofEnrollment.Text); 




      foreach (string s in cbIntendedMajor.CheckedItems) 
      { 

        cmd.Parameters.AddWithValue("@IMajor", s + ","); 

      } 


      cmd.ExecuteNonQuery(); 


    } 
+0

Вы повторно вызываете AddWithValue («@ IMajor»), только эффект будет иметь эффект. Сначала создайте строку, * then * call AddWithValue. –

+0

Это имеет смысл. Я даже не заметил, что добавляю в цикле. Спасибо. – user1863593

ответ

0

Я думаю, что ваш параметр можно добавить только один раз. Вместо этого вы можете рассмотреть итерацию над .CheckedItems, создав одну строку с каждым добавленным элементом с запятой. Затем вне цикла foreach() вы можете cmd.Parameters.AddwithValue («@ IMajor», fullString