XmlParser/app/BrainpoolXmlParser/Querybuilder.vb
2015-11-02 13:54:12 +01:00

57 lines
1.8 KiB
VB.net

Public Class Querybuilder
Public Shared Function Build(config As ConfigValues, db As DB)
Dim suffixQuery As String = "AND (DB=DE OR DB=EM OR DB=IR)"
Dim mainQuery As String
Dim baseQuery As String
Dim companies As List(Of String)
' searchvalues ist entweder eine SQL Abfrage oder eine Kommagetrennte Liste
If config.query.ToUpper.StartsWith("SELECT") Then
companies = GetLiveQueryResult(config.query, db)
Else
companies = New List(Of String)(config.query.Split(","))
End If
mainQuery = BuildMainQuery(companies)
baseQuery = String.Format("({0}) {1}", mainQuery, suffixQuery)
Return baseQuery
End Function
Public Shared Function BuildMainQuery(companies As List(Of String)) As String
Dim query As String = ""
For Each company As String In companies
Dim querypart As String = String.Format("(INH=""{0}"" OR ANM=""{0}"")", company.Trim())
query &= querypart
' Bei alles bis auf das letzte Unternehmen einen OR Operator einfügen
If (companies.IndexOf(company) + 1) < companies.Count Then
query &= " OR "
End If
Next
Return query
End Function
Public Shared Function GetLiveQueryResult(query As String, db As DB) As List(Of String)
Dim result As New List(Of String)
Dim SQL As String = query
Dim DT As DataTable = db.QueryTable(SQL)
If DT.Rows.Count = 0 Then
Throw New Exception("SQL Abfrage lieferte ein leeres Ergebnis zurück: " & query)
End If
For Each row As DataRow In DT.Rows
Dim item As String = CStr(row.Item(0)).Trim()
result.Add(row.Item(0))
Next
Return result
End Function
End Class