2014-07-24 1 views
0

Je veux insérer une image dans une base de données MySQL en utilisant la connexion ADODB vb.net 2008.comment insérer l'image dans la base de données MySQL en utilisant la connexion vb.net et adodb

J'utilise une requête de sélection pour insérer des données dans la base de données, voici mon code pour ajouter ou la sauvegarde des données ...

rs.Open("select * from registration where Debt_ID = '" & txtDebt_ID.Text & "' ", cnn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockPessimistic) 
    If rs.RecordCount = 1 Then 
     MsgBox("ID already exist!", MsgBoxStyle.Exclamation, vbOK) 
     rs.Close() 
     cnn.Close() 

     Exit Sub 
    Else 

     rs.AddNew() 
     rs.Fields("Debt_ID").Value = txtDebt_ID.Text 
     rs.Fields("LastName").Value = txt_Lastname.Text 
     rs.Fields("firstName").Value = txt_Firstname.Text 
     rs.Fields("MiddleName").Value = txt_Middlename.Text 
     rs.Fields("age").Value = txt_Age.Text 
     rs.Fields("birthdate").Value = txt_Birthdate.Text 
     rs.Fields("civil_status").Value = txtCivil_status.Text 
     rs.Fields("address").Value = txt_Address.Text 
     rs.Fields("occupation").Value = txt_Address.Text 
     rs.Fields("contact_no").Value = txt_Contact.Text 
     'rs.Fields("picture").Value = PictureBox1.Image 
     rs.Save() 
     rs.Close() 
    End If 

Je voulais ajouter une image sur la base de données dans l'image sur le terrain et je l'utilise blob comme mon type de données pour cela, je veux aussi pour récupérer l'image de la base de données et l'afficher dans une image ... quelqu'un peut m'aider s'il vous plaît concernant mon problème.

Merci à l'avance ...

+0

stockez le chemin de l'image ou utilisez le type de données 'BLOB' – Sathish

+0

Ma première question doit être pourquoi utilisez-vous un ADODB dans VB.NET pour commencer? Si vous utilisez la technologie d'accès aux données VB6, pourquoi utiliser VB.NET? Si vous utilisez .NET, vous devez utiliser .NET, ce qui signifie utiliser ADO.NET pour l'accès aux données. – jmcilhinney

Répondre

2

Indépendamment de ce que les données la technologie d'accès ou la base de données que vous utilisez, vous devez d'abord convertir Image en Byte d'abord, puis enregistrez-le. Lors de la récupération, vous convertissez le tableau Byte en Image.

Pour enregistrer:

Dim connection As New SqlConnection("connection string here") 
Dim command As New SqlCommand("UPDATE MyTable SET Picture = @Picture WHERE ID = 1", connection) 

'Create an Image object.' 
Using picture As Image = Image.FromFile("file path here") 
    'Create an empty stream in memory.' 
    Using stream As New IO.MemoryStream 
     'Fill the stream with the binary data from the Image.' 
     picture.Save(stream, Imaging.ImageFormat.Jpeg) 

     'Get an array of Bytes from the stream and assign to the parameter.' 
     command.Parameters.Add("@Picture", SqlDbType.VarBinary).Value = stream.GetBuffer() 
    End Using 
End Using 

connection.Open() 
command.ExecuteNonQuery() 
connection.Close() 

Pour récupérer:

Dim connection As New SqlConnection("connection string here") 
Dim command As New SqlCommand("SELECT Picture FROM MyTable WHERE ID = 1", connection) 

connection.Open() 

Dim pictureData As Byte() = DirectCast(command.ExecuteScalar(), Byte()) 

connection.Close() 

Dim picture As Image = Nothing 

'Create a stream in memory containing the bytes that comprise the image.' 
Using stream As New IO.MemoryStream(pictureData) 
    'Read the stream and create an Image object from the data.' 
    picture = Image.FromStream(stream) 
End Using 

Cet exemple est pour ADO.NET et SQL Server, mais le principe d'utiliser un MemoryStream pour la conversion est le même quel que soit.

0

créer une table avec BLOB champ comme suit

CREATE TABLE picture (
ID INTEGER AUTO_INCREMENT, 
IMAGE BLOB, 
PRIMARY KEY (ID) 
); 

insert dans ce tableau en utilisant la chaîne de requête suivante:

Dim mstream As New System.IO.MemoryStream() 
pic_box_save.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg) 
Dim arrImage() As Byte = mstream.GetBuffer() 
mstream.Close() 
Try 
sql = "INSERT INTO image_in_db(id, image_data) VALUES(@image_id, @image_data)" 
sql_command = New MySqlClient.MySqlCommand(sql, sql_connection) 
sql_command.Parameters.AddWithValue("@image_id", Nothing) 
sql_command.Parameters.AddWithValue("@image_data", arrImage) 
sql_command.ExecuteNonQuery() 
Catch ex As Exception 
MsgBox(ex.Message) 
Exit Sub 
End Try 
MsgBox("Image has been saved.") 
+0

Non. C'est un mauvais code car il n'utilise pas de paramètres et il va seulement enregistrer un 'String', pas un' Image'. That 'String' peut contenir le chemin d'un fichier image mais cela ne fait pas l'image elle-même. Certaines personnes préfèrent stocker des chemins de fichiers plutôt que des images dans une base de données, mais cela risque de déplacer, de renommer ou de supprimer un fichier et de contenir des données incorrectes dans la base de données. – jmcilhinney

+0

@ jmcilhinney: voir mes mises à jour dans la réponse – Suji

Questions connexes