2014-10-31 78 views
0

我可能今天上午正在網絡上的東西很簡單,但我收到以下錯誤:DataTable的語法錯誤表達錯誤

Syntax error in the expression

在這行代碼:

Dim result() As DataRow = tmp_Table.Select("id, name, Snippet, description, lat, lng, " & _ 

嘗試當在vb.net中查詢我的dataTable。

這裏是我的代碼:

Dim tmp_Table As DataTable = New DataTable("radiusDataFromCSV") 
Dim center_lat As Double = 0 
Dim center_lng As Double = 0 
Dim radius As Integer = 0 

Dim tmpName As String = "" 
Dim tmpSnippet As String = "" 
Dim tmpdescription As String = "" 
Dim tmpcoordinates As String = "" 
Dim tmpLat As Double = 0 
Dim tmpLng As Double = 0 

'Add columns. 
tmp_Table.Columns.Add(New DataColumn("id", GetType(Integer))) 
tmp_Table.Columns.Add(New DataColumn("name", GetType(String))) 
tmp_Table.Columns.Add(New DataColumn("Snippet", GetType(String))) 
tmp_Table.Columns.Add(New DataColumn("description", GetType(String))) 
tmp_Table.Columns.Add(New DataColumn("lat", GetType(Double))) 
tmp_Table.Columns.Add(New DataColumn("lng", GetType(Double))) 

'****Some code between here left out*** 

Dim result() As DataRow = tmp_Table.Select("id, name, Snippet, description, lat, lng, " & _ 
              "(3959 * acos(cos(radians(" & EscapeLikeValue(center_lat) & ")) " & _ 
               "* cos(radians(lat)) " & _ 
               "* cos(radians(lng) " & _ 
               "- radians(" & EscapeLikeValue(center_lng) & ")) " & _ 
               "+ sin(radians(" & EscapeLikeValue(center_lat) & ")) " & _ 
               "* sin(radians(lat)))) AS distance " & _ 
              "FROM tmp_Table " & _ 
              "HAVING distance < " & EscapeLikeValue(radius) & " " & _ 
              "ORDER BY distance") 

Private Function EscapeLikeValue(value As String) As String 
    Dim sb As New StringBuilder(value.Length) 

    For i As Integer = 0 To value.Length - 1 
     Dim c As Char = value(i) 

     Select Case c 
      Case "]"c, "["c, "%"c, "*"c 
       sb.Append("[").Append(c).Append("]") 
       Exit Select 
      Case "'"c 
       sb.Append("''") 
       Exit Select 
      Case Else 
       sb.Append(c) 
       Exit Select 
     End Select 
    Next 

    Return sb.ToString() 
End Function 

我是什麼,以便引起該錯誤失蹤?

+0

你誤會了'DataTable.Select'。第一個參數是過濾器。我想你想填表。然後,您不需要手動添加列,而是在您的select-sql和dataAdapter.Fill(tmp_Table)'中使用'DataAdapter'。 – 2014-10-31 13:53:58

+0

@TimSchmelter我已經更新了問題本身,因爲你給了我這個建議。我現在正在上面的OP中得到一個新的錯誤。 – StealthRT 2014-10-31 13:56:29

回答

0

正如Tim所說,您沒有正確使用SELECT方法。請考慮它是否是SQL語句的WHERE子句。例如:

SELECT * From Table Where ID = 45 

您選擇的方法是:

Dim result() As DataRow = tmp_Table.Select("ID = 45") 

現在,這裏最重要的是,它假設你已經在你的桌上擺滿了數據。這不會填滿表格,它會從表格中的數據中讀取。

最後要提的是你不能使用GROUP BY或HAVING或類似的東西。這只是過濾標準。

+0

有沒有什麼等同於*真正的MSSQL查詢*而無需使用MS SQL服務器?我試圖擺脫必須創建一個數據庫。 – StealthRT 2014-10-31 14:19:54

+0

沒有數據庫,沒有。您可以在VB中使用LINQ最接近:http://msdn.microsoft.com/en-us/library/bb763068.aspx – Steve 2014-10-31 16:49:12

相關問題