2017-08-24 19 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にワイルドカード文字が含まれていないかぎり、LIKEではなくuse =です。

あなたは、おそらく最も簡単な方法は、それと間違っている正確に何を明らかにするためにあなたのsqlline1変数を印刷することで、あなたのような比較Where debtor_cohort_id Like '{0} + {2}' And ...

周りの単一引用符を必要としています。

関連する問題