我想寫一些相當簡單的ASP.NET代碼來操作SQL Server 2012數據庫中的數據。我已經做了一百次之前,但由於某種原因,這是行不通的,這讓我瘋狂。聲明後仍然'必須聲明標量變量'錯誤
我有下面的代碼。該頁面正確加載並顯示數據。我還可以通過修改textboxes
中的值並點擊更新按鈕來成功更新記錄。但刪除按鈕不起作用 - 每次我點擊它,我得到錯誤必須聲明標量變量@PhoneNumberID。正如你所看到的,我已經將這個變量包含在了我的DeleteParameters中,並且它與我在UpdateParameters中聲明它的方式相同,這似乎工作正常!
<asp:Label ID="lblPersonID" runat="server" Text="2" /><br /><br />
<asp:ListView ID="lvEditPhoneNumbers" runat="server" DataSourceID="SQLEditPhoneNumbers" >
<ItemTemplate>
<asp:Label ID="lblPhoneNumberID" runat="server" Text='<%#Bind("PhoneNumberID")%>' />
<asp:DropDownList ID="ddlEditPhoneNumberType" runat="server" DataSourceID="SQLPhoneNumberType" DataTextField="Description" DataValueField="ID" SelectedValue='<%#Bind("PhoneNumberTypeID")%>' />
<asp:SqlDataSource ID="SQLPhoneNumberType" runat="server" ConnectionString="<%$ ConnectionStrings:ContactsConnectionString %>"
SelectCommand="SELECT * FROM [PhoneNumberType] WHERE [Deleted] = 0"></asp:SqlDataSource>
<asp:TextBox ID="txtEditPhoneNumber" runat="server" Text='<%#Bind("PhoneNumber")%>' CssClass="contactdetailseditfield" />
<asp:ImageButton ID="btnDeletePhoneNumber" runat="server" ImageUrl="~/Images/trash-26.png" Width="15px" Height="15px" ToolTip="Delete this phone number" CommandName="Delete" />
<asp:Button ID="btnUpdate" runat="server" Text="Update" CommandName="Update" />
</ItemTemplate>
</asp:ListView>
<asp:SqlDataSource ID="SQLEditPhoneNumbers" runat="server" ConnectionString="<%$ ConnectionStrings:ContactsConnectionString %>"
SelectCommand="SELECT * FROM [PhoneNumbers] WHERE ([PersonID] = @PersonID) AND ([Deleted] = 0)"
UpdateCommand="UPDATE [PhoneNumber] SET [PhoneNumber] = @PhoneNumber, [PhoneNumberType] = @PhoneNumberTypeID WHERE ([ID] = @PhoneNumberID)"
DeleteCommand="UPDATE [PhoneNumber] SET [Deleted] = 1 WHERE ([ID] = @PhoneNumberID)" >
<SelectParameters>
<asp:ControlParameter ControlID="lblPersonID" Name="PersonID" PropertyName="Text" Type="String" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="PhoneNumberID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="PhoneNumberID" Type="Int32" />
<asp:Parameter Name="PhoneNumber" Type="String" />
<asp:Parameter Name="PhoneNumberTypeID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
是的,我知道的是顯示的數據是不漂亮的方式 - 我把這個代碼出它應該出現在試圖弄清楚這是怎麼回事頁面。是的,我知道我已經在DeleteCommand
中加入了UPDATE
命令,但是我過去沒有遇到過問題(至少我認爲我有過),並且無論如何,如果我在命令中取出參數值並用明確聲明的值替換它。
你沒有指定[**'DataKeyNames' **](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listview.datakeynames(v = vs.110).aspx),所以它知道行的唯一標識符? – mellamokb
我想過,但決定這是一個愚蠢的想法,因爲1)我是顯式傳遞唯一標識符(PhoneNumberID),2)SQLDataSource是從查詢中選擇而不是表。但我剛纔嘗試過,添加DataKeyNames屬性已修復它,所以謝謝!輸入它作爲答案,以便我可以接受它! –