0
我有一個aspx頁面,允許用戶輸入字符串asp:ControlParameter
,然後使用SelectCommand
傳遞給存儲過程。無法使用asp將通配符傳遞給存儲過程:ControlParameter
問題是,如果用戶在文本框中輸入123456%
以獲取所有匹配項,則調用console.aspx頁會引發datareader錯誤。如果他們輸入123456
它工作正常。
存儲過程使用包括代碼:
l.nbr = @Nbr + '%'
這將返回所有的可能性,但是用戶希望它只是除非他們在文本框中輸入通配符%
返回精確匹配。
我已經在SSMS中編寫了一個查詢來重複我想要的,它工作正常。
什麼導致數據讀取器無法將通配符的參數傳遞給存儲過程?
ASPX代碼:
<asp:SqlDataSource ID="dsBook" runat="server"
SelectCommand="spLoadList" SelectCommandType="StoredProcedure"
CancelSelectOnNullParameter="False">
<SelectParameter>
<asp:ControlParameter ControlID="txtNbr"
Name="Number"
Type="String" DefalultValue=""
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
存儲過程:
SELECT
b.Id
FROM dbo.Book b
LEFT OUTER JOIN dbo.BookStatus ls
ON b.Id = bs.Id
WHERE (b.Id IN (SELECT BookId FROM dbo.BookActiveView WHERE UserId = @UserId AND ApplCd = 'BT'))
AND (b.Nbr LIKE @Nbr) <-- This is where it used to say (b.Nbr = @Nbr + '%')
;
發佈您的代碼(ASP和SQL)。它是一個數字參數嗎? – Horaciux 2014-09-30 14:14:03
'l.nbr = @Nbr +'%''只有在有匹配'123456%'的記錄時纔會返回'...'l.nbr LIKE @Nbr +'%''是將返回所有匹配記錄的代碼以'123456'開頭 – balexandre 2014-09-30 14:36:53
我的歉意,但我輸入的代碼是(b.Nbr LIKE @Nbr)替換原來的(b.Nbr = @Nbr +'%')我錯過了上面的輸入。 asp:ControlParameter未正確地將字符串中的'%'傳遞給存儲過程。 – Troy 2014-09-30 17:22:26