2009-09-21 81 views
0

我有兩個列表框。我可以通過文本框將值添加到一個列表框中。在這個列表框中,我通過單擊添加按鈕將所需的值添加到listbox2。listbox values to database

現在我無法獲得如何將第二個列表框中的值添加到名爲Machines的數據庫表中。這些值被添加到不同的行。

 
Listbox2 

PC1 

PC2 

PC3 

並將其添加到數據庫中的表機

請幫我

這是從一個列表框到其他值傳遞的代碼...

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Collections; 
using System.Data.SqlClient; 
using System.IO; 

namespace WebApplication3 
{ 
    public partial class WebForm2 : System.Web.UI.Page 
    { 
     ArrayList lasset = new ArrayList(); 
     ArrayList lsubordinate = new ArrayList(); 
     static ArrayList UpdateList = new ArrayList(); 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 

     protected void ListBox2_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 
     //add one by one// 
     protected void Button4_Click(object sender, EventArgs e) 
     { 
      if (ListBox1.SelectedIndex >= 0) 
      { 
       for (int i = 0; i < ListBox1.Items.Count; i++) 
       { 
        if (ListBox1.Items[i].Selected) 
        { 
         if (!lasset.Contains(ListBox1.Items[i])) 
         { 
          lasset.Add(ListBox1.Items[i]); 
         } 
        } 
       } 
       for (int i = 0; i < lasset.Count; i++) 
       { 
        if (!ListBox2.Items.Contains(((ListItem)lasset[i]))) 
        { 
         ListBox2.Items.Add(((ListItem)lasset[i])); 
        } 
        ListBox1.Items.Remove(((ListItem)lasset[i])); 
       } 
      } 
     } 
     //Add all 
     protected void Button5_Click(object sender, EventArgs e) 
     { 
      while (ListBox1.Items.Count != 0) 
      { 
       for (int i = 0; i < ListBox1.Items.Count; i++) 
       { 
        if (!lasset.Contains(ListBox1.Items[i])) 
        { 
         lasset.Add(ListBox1.Items[i]); 
        } 
       } 
       for (int i = 0; i < lasset.Count; i++) 
       { 
        if (!ListBox2.Items.Contains(((ListItem)lasset[i]))) 
        { 
         ListBox2.Items.Add(((ListItem)lasset[i])); 
        } 
        ListBox1.Items.Remove(((ListItem)lasset[i])); 
       } 
      } 
        } 
     //remove from listbox2 and add to listbox1// 
     protected void Button6_Click(object sender, EventArgs e) 
     { 
      if (ListBox2.SelectedItem != null) 
      { 
       for (int i = 0; i < ListBox2.Items.Count; i++) 
       { 
        if (ListBox2.Items[i].Selected) 
        { 
         if (!lsubordinate.Contains(ListBox2.Items[i])) 
         { 
          lsubordinate.Add(ListBox2.Items[i]); 
         } 
        } 
       } 
       for (int i = 0; i < lsubordinate.Count; i++) 
       { 
        if (!ListBox1.Items.Contains(((ListItem)lsubordinate[i]))) 
        { 
         ListBox1.Items.Add(((ListItem)lsubordinate[i])); 
        } 
        ListBox2.Items.Remove(((ListItem)lsubordinate[i])); 
        UpdateList.Add(lsubordinate[i]); 
       } 
      } 

     } 
     //remove all 
     protected void Button7_Click(object sender, EventArgs e) 
     { 
      while (ListBox2.Items.Count != 0) 
      { 
       for (int i = 0; i < ListBox2.Items.Count; i++) 
       { 
        if (!lsubordinate.Contains(ListBox2.Items[i])) 
        { 
         lsubordinate.Add(ListBox2.Items[i]); 
        } 
       } 
       for (int i = 0; i < lsubordinate.Count; i++) 
       { 
        if (!ListBox1.Items.Contains(((ListItem)lsubordinate[i]))) 
        { 
         ListBox1.Items.Add(((ListItem)lsubordinate[i])); 
        } 
        ListBox2.Items.Remove(((ListItem)lsubordinate[i])); 
        UpdateList.Add(lsubordinate[i]); 
       } 
      } 
     } 
+0

我想你需要給我們更多關於你正在使用的數據庫類型的信息。 –

+0

如果你能告訴我們你正在使用什麼樣的數據庫,那真的很有幫助。 – womp

+1

你的問題到底是什麼?我在你的代碼片段中沒有看到任何數據訪問代碼......你甚至嘗試過嗎? –

回答

1

您提供此代碼在您的評論中。

myConn.Open(); 
OleDbCommand dataCommand = new OleDbCommand(); 
if (ListBox2.Items.Count > 0) { 
    foreach (ListItem i in ListBox2.Items) { 
     insertContractCmd = ("insert into table column1) values ('" 
          + ListBox2.Items 
          + "')", myConn); 
     } 
    } 
    myConn.Open(); 
    dataCommand.ExecuteNonQuery(); 
} 

我看到三個問題的代碼:

首先,在INSERT命令一個括號不匹配。將("insert into table column1)更改爲"insert into table (column1)

其次,您打開連接兩次。丟失第二個myConn.Open();

第三,這是最大的問題 - 您試圖連接一個字符串與項目的整個列表。你應該做的是分別串連每一個項目,像這樣:

// note: this is a bad example, use the next one instead 
insertContractCmd = "insert into table (column1) values ("; 
foreach (ListItem item in ListBox2.Items) { 
    insertContractCmd = insertContractCmd + "'" + item.Text + "'"; 
} 
insertContractCmd = insertContractCmd + ")"; 

現在你只需要對付一個小問題 - 這個代碼是不好的,因爲它會導致大量的字符串連接效率低且消耗了大量的的記憶。您應該使用一個StringBuilder來代替:

StringBuilder commandBuilder = new StringBuilder("insert into table (column1) values ("); 
foreach (ListItem item in ListBox2.Items) { 
    commandBuilder.AppendFormat("'{0}'", item.Text); 
} 
commandBuilder.Append(")"); 
insertContractCmd = commandBuilder.ToString(); 

注:我也用AppendFormat爲同一效率的原因。你也可以使用commandBuilder.Append("'" + item.Text + "'");來達到同樣的效果。

希望有幫助,configurator

+0

這是偉大的... 但我有另一個問題...我有一個下拉列表,它已經有了價值。 我需要編寫一個查詢,該查詢從此下拉列表中獲取值,從該值獲取ID值,並將這些值與該ID值一起放入表中。 我知道它太多了,但如果你能以某種方式提供幫助,它會很棒。謝謝 – user175084