Stevean974 Ответов: 3

Как импортировать самый последний файл excel в SQL db


Всем привет,

Я работаю над этим VB.net настольное приложение версии 2010 года. Я хочу загрузить лист Excel в базу данных (sql server), но не отображать данные в Gridview, а только самый последний файл excel. Имя файла Myexcel было установлено в качестве последней даты и времени. Структура такова". filename_DD-MM-YYYY_hh-mm-ss.xls"

Пожалуйста, дайте мне решение, если у вас есть.

заранее спасибо

Что я уже пробовал:

 Function NewestFile(myPath, FileSpec)
        Dim Filenm As String
        Dim RecentFile As String
        Dim LatestDate As Date
               Filenm = Dir(myPath & "File_Flt" & Format(Now(), "dd-MM-yyyy_hh-mm-ss") & ".xls", 0)
        If Filenm <> "" Then
            RecentFile = Filenm
            LatestDate = FileDateTime(myPath & Filenm)
            Do While Filenm <> ""
                'LND = FileDateTime(myPath & Filenm)
                If FileDateTime(myPath & Filenm) > LatestDate Then
                    RecentFile = Filenm
                    LatestDate = FileDateTime(myPath & Filenm)
                End If
                Filenm = Dir()
            Loop
        End If
        NewestFile = RecentFile
    End Function
Private Sub Label1_Click()
        Dim filename As String
        Dim myPath As String
        myPath = "D:\Data\Folders\"
        filename = NewestFile(myPath, "*.xls")
         Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + " ;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
        ExcelConnection.Open()
        Dim expr1 As Object
        Dim expr As String = "SELECT * FROM [Sheet1$]"
        Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, ExcelConnection)
        Dim objDR As OleDbDataReader

        Dim SQLconn As New SqlConnection()
        Dim ConnString As String = "Data Source=sqldb;Initial Catalog=StgSQL;Integrated Security=True"
        SQLconn.ConnectionString = ConnString
        SQLconn.Open()


        Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLconn)
            bulkCopy.DestinationTableName = "ar_inv"

            Try
                objDR = objCmdSelect.ExecuteReader
                bulkCopy.WriteToServer(objDR)
                objDR.Close()
                SQLconn.Close()
                MsgBox("Data's are imported to SQL Succesfully", MsgBoxStyle.Information)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Using
    End Sub

Richard MacCutchan

В чем проблема с вашим кодом?

CHill60

Вы сказали, что вы хотите сделать, но не сказали нам, какие проблемы у вас возникли

3 Ответов

Рейтинг:
2

Richard Deeming

Предположим, что ваша проблема заключается в поиске последнего файла на основе временной метки в имени, попробуйте сделать что-то вроде этого:

Private Shared Function ExtractTimestamp(ByVal filePath As String) As DateTime
    Dim fileName As String = IO.Path.GetFileNameWithoutExtension(filePath)
    If fileName.Length < 19 Then Return DateTime.MinValue
    
    Dim result As DateTime
    Dim value As String = fileName.Substring(fileName.Length - 19)
    DateTime.TryParseExact(value, "dd-MM-yyyy_HH-mm-ss", Nothing, DateTimeStyles.None, result)
    Return result
End Function

Private Shared Function FindNewestFile(ByVal folderPath As String, ByVal baseFileName As String) As String
    Dim fileSpec As String = baseFileName & "??-??-????_??-??-??.xls"
    Return IO.Directory.EnumerateFiles(folderPath, fileSpec).
        OrderByDescending(Function(filePath) ExtractTimestamp(filePath)).
        ThenByDescending(Function(filePath) IO.File.GetLastWriteTimeUtc(filePath)).
        FirstOrDefault()
End Function

Private Sub Label1_Click()
    Dim myPath As String = "D:\Data\Folders\"
    Dim filePath As String = FindNewestFile(myPath, "File_Flt")
    If filePath Is Nothing Then
        MessageBox.Show("No files found to import.")
        Return
    End If
    ...


Maciej Los

5ed!

Рейтинг:
2

phil.o

В дополнение к решению 1, если бы вы использовали формат гггг-ММ-ДД для имен файлов, то вы могли бы просто отсортировать их в алфавитном порядке (по убыванию), чтобы найти самый последний файл.


Рейтинг:
0

MarcusCole6833

Если это одноразовое событие вы действительно можете сделать это с помощью мастера импорта поставляемого в SSMS см. документы ниже



Запустите мастер импорта и экспорта SQL Server - службы Integration Services (SSIS) | Microsoft Docs[^]