Imports System.Data.SqlClient
Imports System.IO

Module AtlasAufschubDatenEinlesen

    Public Sub initAllFiles(path As String) 'Alle Files im Ordner durchlaufen 
        For Each file As String In IO.Directory.GetFiles(path)
            initFile(file)
        Next
        insertSQL()
        'frmMain
    End Sub
    Sub writeLineToSqlInsert(brgak_datum, brgak_betrag, brgak_brgaktoId, brgak_filename, brgak_atc)
        Try
            Using sr As New StreamWriter(AppDomain.CurrentDomain.BaseDirectory & "sql.txt", True)
                sr.WriteLine(brgak_datum & ";" & brgak_betrag & ";" & brgak_brgaktoId & ";" & brgak_filename & ";" & brgak_atc)
            End Using
        Catch ex As Exception
            writeLog("ERROR", "Fehler beim Schreiben der SQL Datei: " & ex.Message)
        End Try
    End Sub
    Public Sub insertSQL()
        If System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory & "sql.txt") Then
            Try
                Using sr As New StreamReader(AppDomain.CurrentDomain.BaseDirectory & "sql.txt")
                    Dim line As String = ""
                    Do While sr.Peek() >= 0
                        line = sr.ReadLine
                        If line.Contains(";") Then
                            Dim s = line.Split(";")
                            tryToInsertProgramm(s(0), CDbl(s(1)), s(2), s(3), s(4))
                        End If
                    Loop
                End Using
                My.Computer.FileSystem.WriteAllText(AppDomain.CurrentDomain.BaseDirectory & "sql.txt", "", False)
            Catch ex As Exception
                writeLog("ERROR", "Fehler beim Lesen der SQL Datei: " & ex.Message)
            End Try
        End If
    End Sub
    Public Sub initFile(file As String)
        Dim checkfile As Boolean = False
        Try
            Using sr As New StreamReader(file)
                If Not file.ToLower.EndsWith("tmp") Then
                    Dim t As DateTime = Now

                    Do
                        checkfile = FileInUse(file)
                    Loop Until checkfile = True Or t.AddSeconds(3) < Now

                    Dim line As String = ""
                    Dim rowcnt = 1
                    Do While sr.Peek() >= 0
                        line = CStr(sr.ReadLine())
                        Dim s = line.Split(Chr(29)) 'nach GroupSeperator splitten   
                        If s(0) = "ASK" AndAlso s(7) = "006128" Then
                            Dim filename = cut_file(file)
                            Dim betrag As Double = CDbl(s(12).Substring(0, 9) & "," & s(12).Substring(9, 2))
                            '    MsgBox(betrag)
                            Dim fi As New System.IO.FileInfo(file)
                            writeLineToSqlInsert(fi.CreationTime.ToString("dd.MM.yyyy hh:mm:ss"), betrag, "1", filename, s(1))
                        End If
                        rowcnt += 1
                    Loop
                    '  writeLogVerarbeitet(cut_file(file))
                End If
            End Using
        Catch ex As Exception
            writeLog("ERROR", "Fehler beim Initialisieren der ATLAS-Datei: " & ex.Message)
        End Try
        insertSQL()
    End Sub

    Private Function cut_file(ByVal file As String) As String ' Funktion zum Entfernen der Backslashs / Ordner While file.Contains("\") file = file.Remove(0, 1) End While Return file End Function 
        While file.Contains("\")
            file = file.Remove(0, 1)
        End While
        Return file
    End Function

   Public Function FileInUse(ByVal sFile As String) As Boolean
        If System.IO.File.Exists(sFile) Then
            Try
                Dim F As Short = FreeFile()
                FileOpen(F, sFile, IO.FileMode.Open, OpenAccess.Read, OpenShare.LockRead)
                FileClose(F)
            Catch
                Return True
            End Try
        End If
        Return False
    End Function

    Public Function tryToInsertProgramm(brgak_datum, brgak_betrag, brgak_brgaktoId, brgak_filename, brgak_atc) As Boolean

        Dim sql As String = " begin tran" &
                           " if Not exists (select * from tblBrgAufschub with (updlock,serializable) where brgak_filename = @brgak_filename) " &
                                  " begin " &
                                  " INSERT INTO tblBrgAufschub " &
                                  " (brgak_datum, brgak_betrag, brgak_brgaktoId, brgak_filename, brgak_atc) VALUES " &
                                  " (@brgak_datum, @brgak_betrag, @brgak_brgaktoId, @brgak_filename, @brgak_atc) " &
                           " End " &
                           " commit tran "


        Dim cn As New SqlConnection()
        cn.ConnectionString = "Data Source=SQLGUIDE01.verag.ost.dmn;Initial Catalog=ADMIN;Integrated Security=false;User ID=sa;Password=BmWr501956;"
        cn.Open()
        Using cn
            Using cmd As New SqlCommand(sql, cn)
                cmd.Parameters.AddWithValue("@brgak_datum", brgak_datum)
                cmd.Parameters.AddWithValue("@brgak_betrag", brgak_betrag)
                cmd.Parameters.AddWithValue("@brgak_brgaktoId", brgak_brgaktoId)
                cmd.Parameters.AddWithValue("@brgak_filename", brgak_filename)
                cmd.Parameters.AddWithValue("@brgak_atc", brgak_atc)
                Try
                    cmd.ExecuteNonQuery()
                    Return True
                Catch ex As SqlException
                    writeLog("ERROR", "Fehler beim Schreiben in die Datenbank: " & ex.Message)
                End Try
            End Using
        End Using
        Return False
    End Function


    Public Sub writeLog(typ, msg)
        '  If Not System.IO.Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "log\") Then
        'System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "log\")
        'End If
        ' Try
        ' Using sr As New StreamWriter(AppDomain.CurrentDomain.BaseDirectory & "log\err.log", True)
        MsgBox(typ & ";" & msg)
        '  End Using
        '  Catch ex As Exception
        ' End Try
    End Sub
   

End Module
