2013-07-03 68 views
1

在调试我的代码,我发现了一个内部异常其内容为:索引属性错误

为了评估索引属性,该属性必须是合格和参数必须由用户显式提供。

在sql脚本运行平稳返回所有行,但在vb它没有返回或找到任何行。我已经检查过主键是在表格中定义的。我怎样才能解决这个问题?我有一个proir查询返回行,但只要我添加了这个新的查询内部异常来了....除了querystring我没有改变任何东西。

这是我做了什么:

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字符串完美无缺地改变了任何东西。我唯一改变的是查询字符串的时候就开始给我这个例外

+0

你可以显示异常发生的行吗?错误是使用.NET功能,听起来不像是一个SQL问题 - 我认为你的VB语法可能在某处可能...或者它可能是一个SQL问题,因为没有数据返回,而你是试图访问不存在的索引属性.. – Charleh

回答

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 

这可不是你想要的。