2017-01-30 4 views
-1

Ich habe eine Tabelle der Postleitzahlen zusammen mit ihrer Breiten- und Längengrad. Die Benutzer Beiträge eine Liste von Postleitzahlen in einem mehrzeiligen Textfeld und eine Liste erstellt wird und fütterte in sql = "SELECT postcode, latitude,longitude FROM geocodes WHERE postcode IN (" & PCList & ")"MySQL WHERE IN gibt nur die letzte Zeile zurück

PCList ist im Format

'AL7 2BQ ','B12 9BS ','B14 7QU ','B21 9SF ','B24 9PJ ','B27 7RR ' 
,'B33 0NG ','B42 1NN ','B63 4RH ','B64 5AB ','B65 0LG ','B70 9QL ' 
,'B73 5AB ','B79 7AG ','BH1 1EN ','BH1 4SX ','BH9 2HE ','BL1 8TH ' 
,'BL3 6JR ','BL4 9HF ','BL5 3YY ','BL8 2EQ ','BN2 5TB ','BN9 0AD' etc. 

ich immer nur die letzte Postleitzahl bekommen. Ich habe MysqlDatareader, Datasets ausprobiert. Die mySQL-Zeichenfolge gibt die vollständige Liste in der Workbench zurück.

Wenn ich die sql mit etwas "SELECT postcode, latitude,longitude FROM geocodes WHERE postcode LIKE 'B65%'" ersetze, dann bekomme ich eine vollständige Liste der Postleitzahlen, die B65 entweder im Datenreader oder in den Datasets starten, aber nicht mit mySQL WHERE IN funktionieren.

Hier ist der Code: -

Protected Sub ShowLocsButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ShowLocsButton.Click 
    Dim PCList As String = Replace(Me.PostcodeListTextBox.Text, vbCrLf, "','") 
    PCList = "'" & PCList & "'" 
    GetMarkers(PCList) 
End Sub 

Protected Sub GetMarkers(ByVal PCList As String) 
Dim PointsDs As New DataSet 
    Dim PointsDa As MySqlDataAdapter 
    Dim ConnString As String = ConfigurationManager.ConnectionStrings("ConnString").ConnectionString 
    Dim conn As New MySqlConnection(ConnString) 
    command.Connection = conn 
    If conn.State <> ConnectionState.Open Then 
     conn.Open() 
    End If 
    sql = "SELECT postcode, latitude,longitude FROM geocodes WHERE postcode IN (" & PCList & ")" 
    command.CommandText = sql 
    PointsDR = command.ExecuteReader() 
    'Dim myrow As Integer = 0 
    Me.VRPMap.Layers.Clear() 
    'MsgBox(PointsDs.Tables(0).Rows.Count) 
    While PointsDR.Read 
     Dim myPostcode As String = PointsDR.GetString(0) 
     Dim myLatitude As String = PointsDR.GetValue(1) 
     Dim myLongitude As String = PointsDR.GetValue(2) 
    End While 
    conn.Close() 

end sub

+1

Dieses Problem wird durch Code verursacht, den wir nicht sehen können. – Strawberry

+1

Was ist '& PCList &' –

+0

Ist das letzte Leerzeichen in jeder Postleitzahl eingerückt? – apomene

Antwort

0
sql = "SELECT postcode, latitude,longitude FROM geocodes WHERE postcode IN (" % PCList % ")" 
+0

Nein, das nicht funktioniert, Syntaxfehler bei%. Ich denke, es ist auf den nachgestellten Leerzeichen in jedem Post, wenn ich sie entfernen, funktioniert es, so dass mein Code Dim PCList As String = Ersetzen (Me.PostcodeListTextBox.Text, VbLf, "','") PCList = "'" & PCList & "'" gibt keinen richtigen Wert ohne das nachfolgende Leerzeichen zurück. –

0

Sein der Trainingsraum, mit vbcrlf ersetzt VbLf in meiner String Schöpfung war, Problem gelöst.

Verwandte Themen