Roman Kuznetsov Ответов: 1

Как сохранить несколько изображений blob-объектов из SQL в файл (еще раз) в VB net?


Всем привет,

У меня есть вторая итерация моего кода, и все еще есть проблема - это только один файл, сохраненный и остановленный.

Как мне нужно изменить мой код для сохранения всех фотографий из fltered управления DataGrid?

Большое спасибо за любые советы и помощь.

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

Этот код загружает данные из sql в DataGridView:

OpenConnection() ' open our connection before

    Dim da As New SqlDataAdapter
    Dim dt As DataTable ' declaration data table
    Dim bs As New BindingSource()

    da = New SqlDataAdapter("Select emp.SSNO As 'Number', emp.LASTNAME As 'LASTNAME', emp.FIRSTNAME As 'FIRSTNAME', emp.MIDNAME As 'MIDNAME', MMOBJS.LNL_BLOB As 'Photo' FROM EMP INNER JOIN BADGE ON EMP.ID = BADGE.EMPID INNER JOIN UDFEMP ON UDFEMP.ID = EMP.ID INNER JOIN DEPT on UDFEMP.DEPT = DEPT.ID INNER JOIN BADGSTAT ON BADGE.STATUS = BADGSTAT.ID INNER JOIN MMOBJS ON MMOBJS.EMPID = BADGE.EMPID", connections)
    dt = New DataTable

    da.Fill(dt)
    bs = New BindingSource()
    bs.DataSource = dt
    DataGridView1.DataSource = bs
    BindingNavigator1.BindingSource = bs

    Dim band As DataGridViewBand = DataGridView1.Columns(4)
    band.Visible = False
    connections.Close() ' close connections

End Sub


Затем, нажав на кнопку "Сохранить", я хочу сохранить в локальную папку все фотографии пользователей из отфильтрованной DataGrid, с оригинальным именем файла для каждой фотографии. Но мой код сохранил только одну фотографию из сетки (выделенная строка), и это все (((

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim Path As String = IO.Path.Combine(Application.StartupPath, "Images",
                                         " " + DataGridView1.CurrentRow.Cells(0).Value.ToString +
                                         " " + DataGridView1.CurrentRow.Cells(1).Value.ToString +
                                         " " + DataGridView1.CurrentRow.Cells(2).Value.ToString +
                                         " " + DataGridView1.CurrentRow.Cells(3).Value.ToString +
                                         "" + ".jpg")
    Dim Dir As String = System.IO.Path.GetDirectoryName(Path)


    Try
        If Not System.IO.Directory.Exists(Dir) Then
            System.IO.Directory.CreateDirectory(Dir)
        End If

    Catch ex As Exception
        MessageBox.Show("Error: Saving Image Failed ->>" & ex.Message.ToString())
    End Try

    SqlBlob2File(Path)
    
End Sub


Private Sub SqlBlob2File(ByVal DestFilePath As String)

    OpenConnection() ' open our connection before
    Dim PictureCol As Integer = 4 ' the column # of the BLOB field

    'Dim cn As New SqlConnection("server=localhost;integrated security=yes;database=NorthWind")
    Dim cmd As New SqlCommand("Select emp.SSNO As 'Number', emp.LASTNAME As 'LASTNAME', emp.FIRSTNAME As 'FIRSTNAME', emp.MIDNAME As 'MIDNAME', MMOBJS.LNL_BLOB As 'Photo' FROM EMP INNER JOIN BADGE ON EMP.ID = BADGE.EMPID INNER JOIN UDFEMP ON UDFEMP.ID = EMP.ID INNER JOIN DEPT on UDFEMP.DEPT = DEPT.ID INNER JOIN BADGSTAT ON BADGE.STATUS = BADGSTAT.ID INNER JOIN MMOBJS ON MMOBJS.EMPID = BADGE.EMPID where EMP.SSNO = @SSNO", connections)
    cmd.Parameters.AddWithValue("@SSNO", DataGridView1.CurrentRow.Cells(0).Value)

    Dim dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
    'dr.Read()
    If dr.HasRows Then

        While dr.Read

            Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
            dr.GetBytes(PictureCol, 0, b, 0, b.Length)


            Dim fs As New System.IO.FileStream(DestFilePath, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
            fs.Write(b, 0, b.Length)
            fs.Close()
        End While
    End If
    dr.Close()
    connections.Close() ' close connections

End Sub

1 Ответов

Рейтинг:
0

M4rLask

Используйте этот метод для просмотра столбцов в вашем datagridview


<pre> Dim x As DataGridViewRow = New DataGridViewRow()
                For Each x In DataGridView1.Rows
'modify this par
Dim Path As String = IO.Path.Combine(Application.StartupPath, "Images",
                                         " " + x.Cells(0).Value.ToString +
                                         " " + x.Cells(1).Value.ToString +
                                         " " + x.Cells(2).Value.ToString +
                                         " " + x.Cells(3).Value.ToString +
                                         "" + ".jpg")
'and this other
cmd.Parameters.AddWithValue("@SSNO", x.Cells(0).Value)

Next