2013-07-03 91 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 

這可不是你想要的。