2017-04-17 90 views
0

我想添加不同的字段以及所有選擇的項目從列表框到使用存儲過程和@@標識的數據庫。從asp列表框中插入所有選定的項目到數據庫

但只有第一個選定的值被插入到表中。當我嘗試使用for循環時,它提供了存儲過程中參數太多的錯誤。

我是新來的asp.net,將不勝感激任何可能的幫助。

存儲過程:

ALTER Procedure [dbo].[InsertProcessUnit] 
(
@ProcessUnitName Varchar(50), 
@ProcessUnitNumber int, 
@ProcessUnitInspected bit, 
@RefineryAreaName Varchar(50), 
@System_id int 
) 
As 
Begin 

BEGIN TRANSACTION 
    INSERT INTO Process_Units (Process_Unit_Name, Process_Unit_Number, Process_Unit_Inspected, Refinery_Area_id) 
    VALUES (@ProcessUnitName, @ProcessUnitNumber,@ProcessUnitInspected,(SELECT Refinery_Area_id from Refinery_Area where Refinery_Area_Name Like @RefineryAreaName)) 
    DECLARE @DataID int; 
    SET @DataID = @@IDENTITY 
    INSERT INTO PU_Systems (Process_Unit_id, System_id) VALUES (@DataID, @System_id) 
COMMIT 
End 

Aspx.cs code: 

try 
      { 
       connection.Open(); 
       SqlCommand command = new SqlCommand(); 
       command.Connection = connection; 
       command.CommandType = CommandType.StoredProcedure; 
       command.CommandText = "InsertProcessUnit"; 
command.Parameters.AddWithValue("@ProcessUnitNumber", PUNumberTxtbox.Text); 
       command.Parameters.AddWithValue("@ProcessUnitName", PUNameDdl.SelectedItem.Value); 
       command.Parameters.AddWithValue("@ProcessUnitInspected", PUInspectedDdl.SelectedItem.Value); 
       command.Parameters.Add("@RefineryAreaName", SqlDbType.Text).Value = RefAreaNameTxtbox.Text; 
       command.Parameters.AddWithValue("@System_id", ListBox1.SelectedItem.Value); 
       command.ExecuteNonQuery(); 
    connection.Close(); 
      Label1.Text = "Successfully Inserted !!"; 
     } 
+0

似乎你需要清除每個迭代的'SqlParameter'(使用for或foreach循環)。由於列表框不會迭代,所以默認情況下它會檢索第一個可用數據以便處理到數據庫中。 –

回答

0

可以使用將selectedIndices屬性:

foreach (int i in listbox.SelectedIndices) 
{ 
    listbox.Items[i].ToString() ... 
} 

或者

foreach (var item in listbox.SelectedItems) 
{ 
    MessageBox.Show(item.ToString()); 
} 
0

我想你settign的前錯過了command.Parameters.Clear()參數在你的C#代碼。

相關問題