Member 11856456 Ответов: 1

Как динамически загружать изображения в базу данных SQL server?


Код, который у меня есть, работает для создания столбцов и добавления изображений в datagridview, но теперь я перехожу к сохранению этих изображений в базе данных.

Что я знаю, так это то, что столбцы для изображений должны быть добавлены, поэтому у меня есть эта часть кода:
Try
            Dim sqlcon As New SqlConnection("mysqlstatement")
            Dim sqladapt = New SqlDataAdapter("Select * from [Table]", sqlcon)

            sqlcon.Open()
            Dim cmd As SqlClient.SqlCommand
            Dim sql As String = "ALTER TABLE [table] ADD IMG image"
            cmd = New SqlClient.SqlCommand(sql, sqlcon)

            cmd.ExecuteNonQuery()
            sqlcon.Close()

            MessageBox.Show(sql.ToString)
        Catch ex As Exception


        End Try


тогда мне нужно связать это с тем, что у меня уже есть, а именно:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

<pre>ofd.Multiselect = True
        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then

            Dim fileCount = ofd.FileNames.Length
            Dim images(fileCount - 1) As Image


            For i As Integer = 0 To fileCount - 1
                If i >= DataGridView1.Columns.Count Then
                    Dim col As New DataGridViewImageColumn()

                    DataGridView1.Columns.Add(col)


                End If

                'adds images to panel control
                images(i) = Image.FromFile(ofd.FileNames(i))


            Next

            DataGridView1.Rows.Add(images)


        End If


Проблема в том, что я не знаю, как сделать несколько столбцов динамически с помощью SQL-оператора. После динамического оператора столбца sql, то как я могу вводить изображения одновременно, не делая другого оператора sql? Решил, что при правильном руководстве я смогу узнать что-то новое и расшириться оттуда.

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

Попытался связать в Столбцах, созданных с помощью
Dim col As New DataGridViewImageColumn()
и попытался построить это, но я предполагаю, что причина, по которой это не сработало, заключалась в том, что столбцы были с одинаковыми именами, а SQL это не нравится.

Я также думал об использовании оператора for each для изображений, загружаемых в gridview, но не был уверен, как написать это в сочетании с оператором sql.

Поэтому я немного теряюсь, когда дело доходит до чего-то такого сложного, или, по крайней мере, для меня его сложного.

1 Ответов

Рейтинг:
12

OriginalGriff

Даже не пытайтесь изменить таблицу: это неправильный подход.
Я предполагаю, что вы пытаетесь добавить столбцы, потому что у вас есть неизвестное количество изображений, связанных с определенной строкой, и думаете, что добавление столбца для каждого из них сделает то, что вы хотите. Не будет. Когда вы добавляете столбец, вы добавляете его в каждую строку таблицы - так что если у вас есть одна строка, которая нуждается в пространстве для 20 изображений, то каждая строка получает это пространство, даже если у них есть только одно изображение.

Вместо этого в таблице вообще нет строк для хранения изображений!
Давайте предположим, что это изображения продукта, и что продукт может иметь переменное количество изображений - точно так же, как что-то для продажи на eBay или Amazon.
У вас есть таблица продуктов:

ID              INT, IDENTITY (or UNIQUEIDENTIFIER, depending on your preference)
Title           NVARCHAR(255)
Description     NVARCHAR(MAX)
Price           DECIMAL(8,2)
Stock           INT
Но вместо добавления столбцов изображений вы создаете вторую таблицу изображений:
ID              INT, IDENTITY (Or UNIQUEIDENTIFIER)
ProductID       Same as ID in the Products table, FOREIGN KEY to Products.ID
ImageData       IMAGE
Затем вы можете добавить к продукту столько изображений, сколько вам нужно, и получить их, используя идентификатор продукта, когда они вам понадобятся.


Member 11856456

Грифф,

вы правы в своих наблюдениях о том, что я пытаюсь сделать. Позвольте мне немного подробнее объяснить, что я пытаюсь сделать. Я создаю базу данных, в которой участвует довольно много людей. У меня есть бумага и документы в формате jpeg, которые я хотел бы включить вместе с их информацией. Как я могу сделать это с помощью вашего совета, который вы давали раньше? Можете ли вы привести примеры или дать мне место, где я могу увидеть примеры?

еще раз спасибо за дельный совет.

barneyman

Грифф предлагает (правильно ИМО) использовать другую ссылочную таблицу, поэтому, чтобы добраться до изображений, вы сделаете что-то вроде этого (используя его схему)

SELECT Imagedata FROM IMAGES WHERE ProductId=@ID где @ID-это есть форма таблицы "товары"

если вам нужен другой столбец, person, то вам нужна другая таблица Person и personid

вам нужно исследовать нормализацию SQL - и ради любви к сыру используйте GUID в качестве идентификаторов и UTC в качестве часового пояса

Member 11856456

Спасибо, я посмотрю нормализацию sql.

OriginalGriff

К сожалению, я не могу голосовать за комментарии! :большой палец вверх: