2017-08-24 118 views
-1

我收到錯誤,說我的語法不正確,但一切看起來都很好。嘗試使用sqlclient.sqldatareader時出錯?

在使用datareader的行上,它表示在單詞「And」中存在不正確的語法。

我嘗試過無數次更改,嘗試使它無效。任何幫助?

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) 

功能是錯誤的: -

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 

我已經嘗試了所有的調試途徑,也沒有運氣。

+1

什麼版本和風格的SQL?我不認爲你可以在大多數SQL中使用大括號作爲文字。因此,爲什麼你在「和」處發生錯誤。 –

+2

你將什麼值放入這些String.Format變量中?我懷疑它與丟失單引號有關... – soohoonigan

+1

@Jacob H這些大括號是用String.Format()代替字符串 – soohoonigan

回答

1

看着Where debtor_cohort_id Like {0} + {2} And ...它看起來像你試圖連接client_idcohort4。除非client_id或cohort4包含通配符use =而不是LIKE。

你可能需要在你喜歡比較Where debtor_cohort_id Like '{0} + {2}' And ...

最簡單的事情就是打印sqlline1變量來揭示什麼是錯的單引號。