Imports System.IO Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlTypes '''Funktionen für d4as Einlesen der Indexdaten aus einer XML- oder '''Textdatei '''Die Funktion liest je nach Inhalt der Inputdatei (Indexfilename) als '''XML oder als TXT (Komma-getrennt) die Indexwerte aus der Datei und liefert '''diese im Property IndexData zurück. '''Stefan Hutter Public Class clsIndexData #Region "Deklarationen" '''Interne Variable für IndexFilenName Dim m_indexfilename As String '''Enthält der Name der Inputdatei mit den Indexdaten (XML oder '''TXT) '''Stefan Hutter Property IndexFileName() As String Get Return m_indexfilename End Get Set(ByVal Value As String) m_indexfilename = Value End Set End Property '''Interne Variable für IndexData Dim m_Indexdata As DataTable '''Datentabelle mit den geladenen Indexwerten '''Stefan Hutter Property Indexdata() As DataTable Get Return m_Indexdata End Get Set(ByVal Value As DataTable) m_Indexdata = Value End Set End Property '''Temporäre Collection mit den getrennten Indexdaten aus der '''txt-Input-Datei '''Stefan Hutter Dim Splitline As Collection #End Region '''Angelieferte Indexdaten auslesen und in die Datentabele Indexdata '''speichern. Abhängig vom angelieferten Format, XML-Datei einlesen oder '''Komma-getrennte Textdatei auslesen '''Stefan Hutter Public Function getindexdata() As Boolean Index_Datei_Sichern(Me.IndexFileName) Try Dim s As String = "" FileOpen(1, Me.IndexFileName, OpenMode.Input) Input(1, s) FileClose(1) If UCase(Microsoft.VisualBasic.Left(s, 5)) = " 0 Then Return True Exit Function End If Indexwerte_Einlesen(s) End While Catch tr.Close() Return False End Try Return True End If Catch Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Öffnen der Inputdatei " + Me.IndexFileName, "", "") Finally Try FileClose(1) Catch End Try If Params.DeleteOriginalfiles = 0 Then FileSystem.Rename(Me.IndexFileName, Me.IndexFileName + "." + Format(Now, "yyyyMMddHHmmss")) Else Try File.SetAttributes(Me.IndexFileName, FileAttributes.Normal) Catch End Try Try File.Delete(Me.IndexFileName) Catch End Try End If End Try End Function Private Sub Index_Datei_Sichern(ByVal filename As String) Try Dim sqlstatement As String = "Select * from Import_Job where Import_JobNr = " + LTrim(Str(Journal.JournalNr)) Dim Connection As New SqlConnection() Dim DA As New SqlDataAdapter(sqlstatement, Globals.sConnectionString_journale) Dim cb As SqlCommandBuilder = New SqlCommandBuilder(DA) Dim dsDATEN As New DataSet() Dim fs As New FileStream(filename, FileMode.Open, FileAccess.Read) Dim mydata(fs.Length) As Byte Try fs.Read(mydata, 0, fs.Length) fs.Close() Connection.ConnectionString = Globals.sConnectionString_journale Connection.Open() DA.Fill(dsDATEN, "docs") Dim myRow As DataRow myRow = dsDATEN.Tables(0).Rows(0) myRow.Item(7) = mydata DA.Update(dsDATEN, "docs") Catch ex As Exception End Try fs = Nothing cb = Nothing dsDATEN = Nothing DA = Nothing Connection.Close() Connection = Nothing Catch End Try End Sub '''XML-Datei als Datatable einlesen '''Stefan Hutter Private Sub xmlinput() Try Dim idxds As New DataSet() idxds.ReadXml(Me.IndexFileName) 'Anpassungen EBES_LSV Dim i As Integer For i = 0 To idxds.Tables.Count - 1 If idxds.Tables(i).Columns.Count > 20 Then Me.Indexdata = idxds.Tables(i) Exit For End If Next ' Me.Indexdata = idxds.Tables(0) Catch ex As Exception Journal.Insert_Journal("", "", "", Me.IndexFileName, 16, "Fehler beim einlesen der XML-Datei: " + ex.Message, "", "") End Try End Sub '''Datentabelle "Indexdata" erstellen, damit die Komma-Getrennten '''Datensätze eingelesen und zugewiesen werden können '''Stefan Hutter Private Sub Datentabelle_Erstellen() Try Dim idxds As New DataSet() idxds.ReadXml(DivFnkt.ApplicationPath + "TabStruktur_Delimited_Import.xml") Me.Indexdata = idxds.Tables(0) Me.Indexdata.Rows(0).Delete() Catch ex As Exception Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Erstellen der Initialiseriungstabelle mit der XML-Struktur" + ex.Message, "", "") End Try End Sub '''Einzele Indexwerte aus dem Inputfile auslesen und als Datensatz in der '''Tabelle "Indexdata" speichern '''Zeile der Inputdatei (Komma-getrennte Werte) '''Stefan Hutter Private Sub Indexwerte_Einlesen(ByVal s As String) Splitline = SplitDelimitedLine(s, ",", """") Insert_Into_DB(Splitline) End Sub '''Datensatz in der Tabelle "Indexdata" einfügen. Die Anzahl der '''Spalten in der Tabelle ist abhängig vom Default-XML, welches zur '''Tabellenerstellung verwendet wird. ''' '''Stefan Hutter Private Sub Insert_Into_DB(ByVal data As Collection) Dim i As Integer Try Dim datacolumns As Integer = Me.Indexdata.Columns.Count Dim RowVals(datacolumns - 1) As Object For i = 0 To datacolumns - 1 RowVals(i) = "" Next For i = 1 To data.Count RowVals(i - 1) = data.Item(i) Next Me.Indexdata.Rows.Add(RowVals) Catch ex As Exception Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Einlesen der Indexdaten: RecordNr:" + Str(i) + ": " + ex.Message, "", "") End Try End Sub '''Splitfunktion '''Input-Zeile '''Trennzeichen der einzelnen werte (z.B. Komma, '''Strichpunkt usw.) '''Qualiflyer, welcher die Werte umschliesst (z.B. '''") '''Stefan Hutter Private Function SplitDelimitedLine(ByVal CurrentLine As String, ByVal Delimiter As String, ByVal Qualifier As String) As Collection Try Dim i As Integer Dim SplitString As New Collection() Dim CountDelimiter As Boolean Dim Total As Integer Dim Ch As Char Dim Section As String CountDelimiter = True Total = 0 Section = "" For i = 1 To Len(CurrentLine) Ch = Mid(CurrentLine, i, 1) Select Case Ch Case Qualifier If CountDelimiter Then CountDelimiter = False Else CountDelimiter = True End If Case Delimiter If CountDelimiter Then 'SplitString.Add(New MySection(Section)) SplitString.Add(Section) Section = "" Total = Total + 1 End If Case Else Section = Section & Ch End Select Next If CountDelimiter Then 'SplitString.Add(New MySection(Section)) SplitString.Add(Section) End If SplitDelimitedLine = SplitString Catch ex As Exception Journal.Insert_Journal("", "", "", "", 16, "Fehler beim Einlesen der Indexdaten: " + ex.Message, "", "") Dim SplitString As New Collection() SplitDelimitedLine = SplitString End Try End Function End Class