Индекс (на основе нуля) должен быть больше или равен нулю и меньше размера аргумента - PullRequest
0 голосов
/ 01 ноября 2011

Я получаю эту ошибку при нажатии на любую из буквенных кнопок в моем репитере. Оператор sql у меня работает на сервере sql, но на моей странице это просто ошибки. Единственное, что отличается, это то, что в sql server я меняю '@CompanyID' на фактический идентификатор, а '{0}' на 'a', чтобы запрос выполнялся.

Все сообщения, которые я нашел в сети с этой проблемой, что-то говорят об этом -> {0}, но я нигде не вижу, чтобы я пытался передать более одного аргумента или ошибся.

<asp:repeater id="rptLetters" runat="server" datasourceid="dsLetters">
<headertemplate>
|
</headertemplate>
<itemtemplate>
<asp:linkbutton id="btnLetter" runat="server" onclick="btnLetter_Click" 
 text='<%#Eval("Letter")%>' />
</itemtemplate>

<separatortemplate>
|
</separatortemplate>
</asp:repeater>

Protected Sub btnLetter_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim btnLetter As LinkButton = TryCast(sender, LinkButton)
    If btnLetter Is Nothing Then
        Return
    End If
    'SELECT statement to filter Gridview
    dsCategoryLookup.SelectCommand = [String].Format("SELECT 
         Category.CategoryID, Category.CategoryName, Product.ProductID, 
         Product.ProductName, Company.CompanyID
         FROM Category 
         LEFT JOIN CategoryLink 
         ON Category.CategoryID = CategoryLink.CategoryID 
         LEFT JOIN Product ON Product.ProductID = CategoryLink.ProductID
         LEFT JOIN CompanyLink ON CompanyLink.ProductID = Product.ProductID
         LEFT JOIN Company ON Company.CompanyID = CompanyLink.CompanyID 
         WHERE (Category.CategoryName LIKE '{0}%') 
         AND Company.CompanyID = @CompanyID), btnLetter.Text")

    'declare @CompanyID
    dsCategoryLookup.SelectParameters.Clear()
    Dim controlParam As ControlParameter = New ControlParameter
    controlParam.ControlID = "ddlCompany"
    controlParam.DefaultValue = "-1"
    controlParam.Name = "CompanyID"
    controlParam.PropertyName = "SelectedValue"
    controlParam.Type = TypeCode.Decimal

    dsCategoryLookup.SelectParameters.Add(controlParam)
End Sub

1 Ответ

0 голосов
/ 01 ноября 2011

Это просто у вас кавычки не в том месте?BtnLetter.Text находится внутри вашей строки формата в вашем коде:

dsCategoryLookup.SelectCommand = [String].Format("SELECT 
     Category.CategoryID, Category.CategoryName, Product.ProductID, 
     Product.ProductName, Company.CompanyID
     FROM Category 
     LEFT JOIN CategoryLink 
     ON Category.CategoryID = CategoryLink.CategoryID 
     LEFT JOIN Product ON Product.ProductID = CategoryLink.ProductID
     LEFT JOIN CompanyLink ON CompanyLink.ProductID = Product.ProductID
     LEFT JOIN Company ON Company.CompanyID = CompanyLink.CompanyID 
     WHERE (Category.CategoryName LIKE '{0}%') 
     AND Company.CompanyID = @CompanyID)", btnLetter.Text)
...