1

在调试我的代码时,我发现了一个内部异常,内容如下:

为了评估索引属性,必须限定属性并且参数必须由用户显式提供。

在 sql 中,脚本运行顺利,返回所有行,但在 vb 中,它没有返回或找到任何行。我检查了主键是否在表中并已定义。我怎样才能解决这个问题?我有一个返回行的 proir 查询,但是一旦我添加了这个新查询,内部异常就来了....除了查询字符串之外,我没有更改任何内容。

这就是我所做的:

    Public Sub BindDeliveredItems()
    Proir if statemets....
    Else
        queryString = "select distinct LS.[Route], LS.[SubRoute], LS.[Truck], Convert(VARCHAR(10), LS.[Date], 121) AS Date, LS.[DriverAssistantContract]" & _
                        ",((del.CT*100 )/ todel.TCT) as Score" & _
                        "from [Warehouse].[dbo].[LoadSheet] LS" & _
                        "left join (select [Truck],[Date],[Status], count([Status]) CT from  [Warehouse].[dbo].[LoadSheet]" & _
                        "WHERE  status='Delivered'" & _
                        "group by [Truck],[Date],[Status]) Del" & _
                        "on LS.truck=Del.truck and LS.[Date]=del.[Date]" & _
                        "left join (select [Truck],[Date], count([Truck]) TCT from  [Warehouse].[dbo].[LoadSheet]" & _
                        "group by [Truck],[Date]) todel" & _
                        "on LS.truck=toDel.truck and LS.[Date]=todel.[Date]" & _
                        "WHERE ls.[Date] = '2013-07-03'" & _
                        "AND ls.[Truck] = 'BX 39 LK GP'"
    End If

   Dim ds As DataSet = GetData(queryString)
    If (ds.Tables.Count > 0) Then
        gvDeliveredItems.DataSource = ds
        gvDeliveredItems.PageSize = (10)
        gvDeliveredItems.AllowPaging = True
        gvDeliveredItems.DataBind()
    End If
End Sub

    Function GetData(ByVal queryString As String) As DataSet
    Dim ds As New DataSet()
    Try
        Dim adapter As New SqlDataAdapter(queryString, SQLCon)
        adapter.Fill(ds)
    Catch ex As Exception
        MessageBox(ex.Message)
    End Try
    Return ds
End Function

编辑:

我第一次看到异常是在这条线上

    Dim ds As DataSet = GetData(queryString)

在这条线上,异常也显示:

    If (ds.Tables.Count > 0) Then

我以前的 sql 字符串可以完美运行,无需更改任何内容。我唯一改变的是查询字符串,当它开始给我这个异常时

4

1 回答 1

3

我建议在您的查询中添加更多空格,例如:

queryString = "select distinct LS.[Route], LS.[SubRoute], LS.[Truck], Convert(VARCHAR(10), LS.[Date], 121) AS Date, LS.[DriverAssistantContract]" & vbCrLf & _
   ",((del.CT*100 )/ todel.TCT) as Score" & vbCrLf & _
   "from [Warehouse].[dbo].[LoadSheet] LS" & vbCrLf & _

vbCrLf是一个VB主义。如果您愿意,可以使用Environment.NewLine

目前,此字符串连接中的字符串没有新行或空格,因此例如,第二行和第三行连接在一起为:

,((del.CT*100 )/ todel.TCT) as Scorefrom [Warehouse].[dbo].[LoadSheet] LS

这不是你想要的,大概。

于 2013-07-03T09:14:26.777 回答