2011-06-10 26 views
1

我正在嘗試使用存儲過程將checkboxlist值插入到SQL Server中。我收到此錯誤如何循環CheckBoxList併爲每個選中的值向數據庫提交值?

項目爲了評估索引屬性,必須限定該屬性,並且參數必須由用戶明確提供。

這裏是我的存儲過程:

ALTER PROCEDURE [dbo].[usp_insertquestionnarie] 
    (@interestid int) 

    INSERT INTO [a_abacus].[dbo].[joininterest] 
    VALUES (@interestid) 

這裏是我的VB代碼:

Protected Sub cmdsubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdsubmit.Click 

     Dim strConnString As String = WebConfigurationManager.ConnectionStrings("a_abacus").ConnectionString 
     Dim con As New SqlConnection(strConnString) 
     Dim cmd As New SqlCommand("usp_insertquestionnarie", con) 'references connectionstring and calls store procedure' 
     cmd.CommandType = Data.CommandType.StoredProcedure 'sets default to be stored procedure' 
     lblmessage.Text = String.Empty 

     Dim Item As ListItem 
     lblMessage.Text = "" 
     For Each Item In chkboxinterest.Items 
      If Item.Selected = True Then 
       con.Open() 
       cmd.Parameters.AddWithValue("@interestid", Item.Value) 
       cmd.ExecuteNonQuery() 'for updating database' 
       lblmessage.Text = "Successfull" 
       cmd.Parameters.Clear() 
      Else 
       lblmessage.Text = "Error" 
      End If 
      con.Close() 
     Next 
    End Sub 

這裏的aspx頁面的標記:

<asp:CheckBoxList ID="chkboxinterest" runat="server" RepeatColumns="3" 
      Width="650px"> 
     <asp:ListItem class="chkbox" runat="server" Text="Aerobics" Value="1" /> 
     <asp:ListItem class="chkbox" runat="server" Text="Antiques & Collectibles" Value="2" /> 
     <asp:ListItem class="chkbox" runat="server" Text="Arts & Crafts" Value="3" /> 
     <asp:ListItem class="chkbox" runat="server" Text="Astronomy" Value="4" /> 
     <asp:ListItem class="chkbox" runat="server" Text="Auto Racing" Value="5" /> 
    </asp:CheckBoxList> 
+0

什麼是你所得到 – 2011-06-10 15:40:56

+0

錯誤這是否能改變什麼' Auto Racing'?奇怪的是,你無法獲得價值。 – 2011-06-10 16:04:31

+0

也蒂姆感謝迴應,但是沒有任何改變 – Tim 2011-06-10 17:21:39

回答

2

首先,沒有必要經常向SQL命令添加參數。

cmd.Parameters.AddWithValue("@interestid", Item.Value) 

你需要改變這一點。

在循環之前,將參數(無值)添加到SqlCommand。但是,請將其聲明爲SQLDbType.int類型。

cmd.Parameters.Add("@interestid", SQLDBType.Int) 

然後,在你的循環中,你只需要改變SQL命令的值。

cmd.Parameters("@interestid").Value = Item.Value 

刪除cmd.Parameters.Clear()

其次,從你的循環刪除con.Open()和con.Close()。

您只需要在循環之前打開連接,並在循環之後關閉它。

三,Item.Value

執行一些輸入驗證是否真的在該範圍內,你認爲這是什麼?在標記中使用RangeValidator,或者在代碼隱藏中執行一些自定義邏輯。最起碼,這樣做:CInt(Item.Value)

四,您的ALTER PROCEDURE語句缺少必要的AS關鍵字

http://msdn.microsoft.com/en-us/library/ms189762.aspx

Alter MyProc (@param int) **AS** Select * from Products 
+0

非常感謝您的幫助,hamlin完美無缺 – Tim 2011-06-12 18:29:45

相關問題