从asp列表框中将所有选定项目插入数据库

时间:2017-04-17 22:50:18

标签: c# asp.net sql-server listbox

我正在尝试使用存储过程和@@ identity将不同的字段以及列表框中的所有选定项添加到数据库中。

但只有第一个选定的值才会插入到表中。当我尝试使用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 !!";
        }

2 个答案:

答案 0 :(得分:0)

您可以使用SelectedIndices属性:

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

或者

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

答案 1 :(得分:0)

我认为您在设置c#代码的参数之前错过了command.Parameters.Clear()。