2015-08-04 7 views
0

Im делает форму окна в C#, где все значения в списке отметок будут храниться в базе данных. Код на самом деле работает, однако:сохранить все выбранные значения из списка checkboxbox в базу данных

  1. только последнее значение проверил магазин несколько раз в базе данных так же, как данные ниже
  2. идентификатор сотрудника (ID) на столе famhistory обыкновение появляться в качестве внешнего ключа, но он появляется на таблица name так же, как данные ниже

Таблица: famhistory

famid   famcon   id 
30    stroke 
31    stroke 
32    stroke 

Таблица: name

eid    name 
2010-0244  Jam Lagcao 

Может ли кто-нибудь помочь мне в решении моих проблем? Большое спасибо за Вашу помощь.

Ниже мой код в C#:

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; 
using Npgsql; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form6 : Form 
    { 
     public Form6() 
     { 
      InitializeComponent(); 
      this.Load += Form6_Load; 
      button1.Click += button1_Click; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=postgres;Password=021393;Database=postgres;"); 
      NpgsqlCommand cmd = new NpgsqlCommand("Insert into name(eid, name) Values (@eid, @name)", conn); 
      cmd.Parameters.AddWithValue("@eid", textBox1.Text); 
      cmd.Parameters.AddWithValue("@name", textBox2.Text); 
      conn.Open(); 

      foreach (DataRowView view in checkedListBox1.CheckedItems) 
      { 
       NpgsqlCommand cmd2 = new NpgsqlCommand("Insert into famhistory (famcon) Values (@famcon)", conn); 
       string value = view.Row[0].ToString(); 
       Console.WriteLine(view[checkedListBox1.ValueMember].ToString()); 
       cmd2.Parameters.AddWithValue("@famcon", checkedListBox1.SelectedValue); 
       cmd2.ExecuteNonQuery(); 
      } 

      cmd.ExecuteNonQuery(); 
      MessageBox.Show("Data has been saved"); 
      conn.Close(); 
     } 

     private void Form6_Load(object sender, EventArgs e) 
     { 
      DataSet ds = new DataSet(); 
      DataTable dt = new DataTable(); 

      string connstring = ("Server=localhost;Port=5432;User Id=postgres;Password=021393;Database=postgres;"); 
      NpgsqlConnection conn = new NpgsqlConnection(connstring); 
      NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM condition", conn); 
      cmd.CommandType = CommandType.Text; 
      conn.Open(); 
      NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd); 
      dt.TableName = "condition"; 
      da.Fill(dt); 
      checkedListBox1.DataSource = dt; 
      checkedListBox1.DisplayMember = "conname"; 
      checkedListBox1.ValueMember = "conname"; 
      checkedListBox1.BindingContext = new BindingContext(); 
      string[] condition = dt.Rows[0]["conname"].ToString().Split(','); 

     } 
    } 
} 
+0

Вы создаете переменную значений и никогда не используете ее. – dbugger

+0

@dbugger извините, но я не понимаю, что вы имеете в виду. – newbie

+0

Возможно, это то, что вы хотели сохранить в базе данных ... string value = view.Row [0] .ToString(); Но вы никогда с этим не справляетесь. – dbugger

ответ

0

Изменение кода операции вставки в famhistory таблицы, как показано ниже

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    NpgsqlCommand cmd2 = new NpgsqlCommand("Insert into famhistory (famcon) Values (@famcon)", conn); 
cmd2.Parameters.AddWithValue("@famcon", item.ToString()); 
cmd2.ExecuteNonQuery(); 
} 

Не знаю, почему вы использовали DataRowView view в foreach заявлении; это неверно.

Также, я использую item.ToString() вместо checkedListBox1.SelectedValue, который предоставит вам только последнее выбранное значение.

+0

im, используя DataRowView, потому что, если я его не использую, в моей таблице появится только System.Data.DataRowView. – newbie

+0

НЕТ, вам, конечно, не нужно это использовать. – Rahul

+0

Я попытался использовать ваш код сейчас, но только System.Data.DataRowView появится в моей таблице базы данных вместо checklistvalue. – newbie