我正在尝试使用存储过程将checkboxlist值插入SQL Server。我收到此错误
项目为了评估索引属性,必须对该属性进行限定,并且必须由用户显式提供参数。
这是我的存储过程:
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 :(得分: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