2017-08-24 4 views
-1

Ich bekomme Fehler, der sagt, dass meine Syntax falsch ist, aber alles sieht gut für mich aus.Fehler beim Versuch, sqlclient.sqldatareader zu verwenden?

In der Zeile, in der der Datenreader verwendet wird, steht, dass beim Wort "And" eine falsche Syntax vorliegt.

Ich habe zahlreiche Änderungen versucht, um es zu versuchen, ohne Erfolg. irgendeine Hilfe?

SQL: -

Dim sqlline1 As String = String.Format("Select count(debtor_id) As 
numbernew, sum(debtor_original_debt) As valuenew, SUM(debtor_balance) 
From debtors Where debtor_cohort_id Like {0} + {2} And (debtor_client_id >= 
{0} And debtor_client_id <= {1})", clientid_start, clientid_end, Cohort4) 

Funktion es Fehler auf: -

Public Function populatestringwithsql(command As String) As String 
    Dim conn As String = "a server connection" 
    Dim i = 1 
    Dim fields(15) As String 
    Dim numberoffields As Integer 
    Using connObj As New SqlClient.SqlConnection(conn) 
     Using cmdObj As New SqlClient.SqlCommand(command, connObj) 
      connObj.Open() 
      Dim readobj As SqlClient.SqlDataReader = cmdObj.ExecuteReader() 
      Dim schematable As DataTable = readobj.GetSchemaTable() 
      readobj.Close() 

      For Each dr As DataRow In schematable.Rows 
       numberoffields = schematable.Columns.Count 
       For Each dc As DataColumn In schematable.Columns 

        fields(i) = dc.ColumnName 
        i += 1 
       Next 
      Next 

      Using readerObj As SqlDataReader = cmdObj.ExecuteReader 
       'This will loop through all returned records 
       While readerObj.Read 
        If fields(1) <> "" Then 
         fields(1) = readerObj(fields(1)).ToString 
        End If 
        If fields(2) <> "" Then 
         fields(2) = readerObj(fields(2)).ToString 
        End If 
        If fields(3) <> "" Then 
         fields(3) = readerObj(fields(3)).ToString 
        End If 
        If fields(4) <> "" Then 
         fields(4) = readerObj(fields(4)).ToString 
        End If 
        If fields(5) <> "" Then 
         fields(5) = readerObj(fields(5)).ToString 
        End If 
        If fields(6) <> "" Then 
         fields(6) = readerObj(fields(6)).ToString 
        End If 
        If fields(7) <> "" Then 
         fields(7) = readerObj(fields(7)).ToString 
        End If 
        If fields(8) <> "" Then 
         fields(8) = readerObj(fields(8)).ToString 
        End If 
        If fields(9) <> "" Then 
         fields(9) = readerObj(fields(9)).ToString 
        End If 
        If fields(10) <> "" Then 
         fields(10) = readerObj(fields(10)).ToString 
        End If 
        If fields(11) <> "" Then 
         fields(11) = readerObj(fields(11)).ToString 
        End If 
        If fields(12) <> "" Then 
         fields(12) = readerObj(fields(12)).ToString 
        End If 
        If fields(13) <> "" Then 
         fields(13) = readerObj(fields(13)).ToString 
        End If 
        If fields(14) <> "" Then 
         fields(14) = readerObj(fields(14)).ToString 
        End If 
        If fields(15) <> "" Then 
         fields(15) = readerObj(fields(15)).ToString 
        End If 
       End While 
      End Using 
      connObj.Close() 
     End Using 
    End Using 

    Dim stringend As Text.StringBuilder 

    For Each field In fields 
     stringend.Append(field) 

    Next 

    Return stringend.ToString 

End Function 

Ich habe alle Möglichkeiten Debuggen versucht und hatte kein Glück.

+1

Welche Version und welcher Geschmack von SQL? Ich glaube nicht, dass Sie geschweifte Klammern für Literale in den meisten SQL verwenden können. Daher erhalten Sie einen Fehler bei "und". –

+2

Welche Werte setzen Sie in diese String.Format-Variablen? Ich vermute, es hat etwas mit fehlenden einfachen Anführungszeichen zu tun ... – soohoonigan

+1

@Jacob H diese geschweiften Klammern sind für den Ersatz in Strings mit String.Format() – soohoonigan

Antwort

1

Mit Blick auf Where debtor_cohort_id Like {0} + {2} And ... sieht es so aus, als ob Sie versuchen, client_id und cohort4 zu verketten. Wenn client_id oder cohort4 kein Platzhalterzeichen enthalten, verwenden Sie = anstelle von LIKE.

Sie müssen wahrscheinlich einfache Anführungszeichen um Ihren like-Vergleich Where debtor_cohort_id Like '{0} + {2}' And ...

Die einfachste Sache ist Ihre sqlline1 Variable zu drucken, genau zu zeigen, was mit ihm nicht stimmt.

Verwandte Themen