نوشته شده توسط
goldpower
سلام
چه طور باید تصویر رو در اکسس ذخیره و بازیابی کرد؟
راه حل :
Imports System.Data.OleDb
Imports System.IO
Public Class Form1
Dim ConnString As String = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & Application.StartupPath & "\ImageDatabase.mdb"
Dim CONNECTION As New OleDbConnection(ConnString)
Dim DS As DataSet
'
'Load
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call ReloadImages()
End Sub
'
'Browse
Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
With OpenFileDialog1
.InitialDirectory = "C:\"
.Filter = "Bitmaps (*.bmp)|*.bmp|GIFs (*.gif)|*.gif|JPEGs (*.jpg)|*.jpg|All Image File (*.jpg,*.bmp,*.gif)|*.jpg;*.bmp;*.gif"
.FilterIndex = 2
End With
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
With PictureBox1
.Image = Image.FromFile(Me.OpenFileDialog1.FileName)
.SizeMode = PictureBoxSizeMode.AutoSize
End With
End If
Me.Label1.Text = Me.OpenFileDialog1.FileName.ToString
End Sub
'
'Save
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
If Me.Label1.Text.Trim = "" Then
MsgBox("Please browse a picture to save!", MsgBoxStyle.Information, "No Picture to Save")
Exit Sub
End If
Dim ms As New MemoryStream
Me.PictureBox1.Image.Save(ms, Me.PictureBox1.Image.RawFormat)
Dim arrayImage() As Byte = ms.GetBuffer
ms.Close() ' Closes the Memory Stream
Dim nStr As String = Me.Label1.Text.Substring(Me.Label1.Text.LastIndexO f("\") + 1)
Dim strQuery As String = "INSERT INTO Pic(Name, Picture) VALUES(@Name, @Picture)"
Dim objcommand As New OleDbCommand(strQuery, CONNECTION)
With objcommand
.Parameters.Add(New OleDbParameter("@Name", SqlDbType.NVarChar, 50)).Value = nStr
.Parameters.Add(New OleDbParameter("@Picture", SqlDbType.Image)).Value = arrayImage
End With
CONNECTION.Open()
objcommand.ExecuteNonQuery()
MessageBox.Show("Image Saved Into the DataBase", "Save Successfully", MessageBoxButtons.OK, MessageBoxIcon.Information)
CONNECTION.Close()
ReloadImages()
'Find and Select the Image Last Save.
Dim index As Integer = Me.ListBox1.FindStringExact(nStr)
Me.ListBox1.TopIndex = index
ListBox1.SelectedIndex = index
End Sub
'
'Delete
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
Dim intID As Integer
If Me.ListBox1.SelectedIndex > -1 Then
intID = Me.DS.Tables(0).Rows(Me.ListBox1.SelectedIndex).It em("ID")
Else
'nothing to delete
Exit Sub
End If
Dim strQuery As String = "DELETE FROM Pic WHERE ID=@ID"
Dim objcommand As New OleDbCommand(strQuery, CONNECTION)
With objcommand
.Parameters.Add(New OleDbParameter("@ID", SqlDbType.Int)).Value = intID
End With
CONNECTION.Open()
objcommand.ExecuteNonQuery()
MessageBox.Show("Delete Image From the DataBase", "Delete Successfully", MessageBoxButtons.OK, MessageBoxIcon.Information)
CONNECTION.Close()
ReloadImages()
End Sub
'
'Export Picture
Private Sub ExportPictureToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportPictureToolStripMenuItem.Click
If Me.ListBox1.SelectedIndex > -1 Then
Dim strPic As String = DS.Tables(0).Rows(Me.ListBox1.SelectedIndex).Item( "Name")
Dim strExt As String = strPic.Substring(strPic.LastIndexOf(".") + 1)
Dim strFileName As String = strPic.Remove(strPic.LastIndexOf("."))
Dim Index As String
Select Case strExt
Case "bmp"
Index = 1
Case "gif"
Index = 2
Case "jpg"
Index = 3
Case Else
Index = 0
End Select
With SaveFileDialog1
.Filter = "Bitmaps (*.bmp)|*.bmp|GIFs (*.gif)|*.gif|JPEGs (*.jpg)|*.jpg"
.FilterIndex = Index
End With
Me.SaveFileDialog1.FileName = strFileName
If Me.SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
Me.PictureBox1.Image.Save(Me.SaveFileDialog1.FileN ame)
End If
End If
End Sub
'
'
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
If Me.Label1.Text.Trim <> "" Then
If IO.File.Exists(Me.Label1.Text) = True Then
Me.PictureBox1.Image = Image.FromFile(Me.Label1.Text)
Else
MsgBox("The picture file does not exist!", MsgBoxStyle.Exclamation, "File does not exist")
End If
End If
End Sub
'
'
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
If Me.ListBox1.SelectedIndex > -1 Then
Dim arrayImage() As Byte = CType(Me.DS.Tables(0).Rows(Me.ListBox1.SelectedInd ex).Item("Picture"), Byte())
Dim ms As New MemoryStream(arrayImage)
With Me.PictureBox1
.Image = Image.FromStream(ms)
.SizeMode = PictureBoxSizeMode.AutoSize
End With
End If
End Sub
'
'
Private Sub rdoNormal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
End Sub
#Region "Helper"
Private Sub ReloadImages()
Try
Dim cmd As New OleDbCommand("SELECT * FROM Pic ORDER BY Name", CONNECTION)
Dim DA As New OleDbDataAdapter(cmd)
DS = New DataSet
DA.Fill(DS)
Me.ListBox1.DataSource = DS.Tables(0)
Me.ListBox1.DisplayMember = "Name"
Me.ListBox1.ValueMember = "ID"
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
#End Region
End Class