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