2

I have created a new SQL Server local database with a table called drink. I use Microsoft Visual Studio 2008.

Inside the table I defined the following columns:

id [int], kind [varchar], year [datatime], image [image]

I would like to insert images into the image column but I don't know how to do.

I need this column, because I want to display all data in DataGridView using VB.NET

Thanks for help!

2
  • 1
    If you can change the format of the table you should really use Varbinary(Max) as Image is deprecated. stackoverflow.com/questions/444072/… Commented Apr 3, 2015 at 22:02
  • image data type will be removed in a future version of SQL Server. Avoid using this data types in new development work, and plan to modify applications that currently use it. Use varbinary(max) instead. See details here Commented Apr 4, 2015 at 6:44

5 Answers 5

3

Using openrowset you can insert image into database:

insert into tableName (id,kind,ImageColumn) 
SELECT 1,'JPEG',BulkColumn 
FROM Openrowset( Bulk '<Path of the image>', Single_Blob) as img
Sign up to request clarification or add additional context in comments.

Comments

2

This worked for me...

Imports System.Data.Sql
Imports System.IO
Imports System.drawing

Module Module1

    Private Const _ConnectString As String = "your connection string here"

     Sub Main()
        Dim MyImage As Image = Image.FromFile("RandomImage.jpg")
        Dim Id As Long = 1
        SaveDrinkImage(MyImage, Id)
     End Sub

    Sub SaveDrinkImage(MyImage As Image, Id As Long)

        Dim ImageBytes(0) As Byte
        Using mStream As New MemoryStream()
                 MyImage.Save(mStream, MyImage.RawFormat)
                 ImageBytes = mStream.ToArray()
        End Using

        Dim adoConnect = New SqlClient.SqlConnection(_ConnectString)
        Dim adoCommand = New SqlClient.SqlCommand("UPDATE [drink] SET [image]=@MyNewImage WHERE [id]=@id", adoConnect)

        With adoCommand.Parameters.Add("@MyNewImage", SqlDbType.Image)
            .Value = ImageBytes
            .Size = ImageBytes.Length
        End With
        With adoCommand.Parameters.Add("@id", SqlDbType.BigInt)
            .Value = Id
        End With

        adoConnect.Open()
        adoCommand.ExecuteNonQuery()
        adoConnect.close()

    End Sub

End Module

Comments

0

There are two approaches. You can store the image as a blob in the database or you can store the path (string) to the image file. There is an answer that discusses this: Storing images in SQL Server?

Comments

0

Try this:

Sub SaveDrinkToDB(name As String, imageFilePath As String)
    Using cn = New SqlConnection("connection string here")
        cn.Open()
        Using cmd = New SqlCommand("INSERT INTO Drink (Name, Image) Values(@Name,@Image)", cn)
            cmd.Parameters.AddWithValue("@name", name)
            cmd.Parameters.AddWithValue("@Image", File.ReadAllBytes(imageFilePath))
            cmd.ExecuteNonQuery()
        End Using
    End Using
End Sub

Usage:

    SaveDrinkToDB("Milk", "c:\drink.png")

Comments

0
USE [database_name]
GO
INSERT INTO [schema].[tablename]([property1],[property2],[Property3],[Image])
     VALUES
           ('value','value','value','C:\pathname.jpg')
GO

1 Comment

Don't add only code to answer, explanation is also necessary

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.