2017-08-24 117 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变量来揭示什么是错的单引号。