Thursday, September 4, 2008

how to save and search the pictures from the database(vb.net windows applications) :ഡേറ്റാബേസിലേക്ക് ചിത്രങ്ങള്‍ സേവ് ചെയ്യുന്നത് :(vb.net windows ap

ഡേറ്റാബേസിലേക്ക് ചിത്രങ്ങള്‍ സേവ് ചെയ്യുന്നത് :(vb.net windows applications)



shibu എന്ന ഡേറ്റാബേസില്‍ stuphoto എന്ന് ഒരു ടേബിള്‍ ഉണ്ടാക്കിയിരിക്കുന്നു.slno(int,primarykey),regno(int) , stuname(varchar) ,stuclass(varchar) ,stuphoto (image) എന്നീ ഫീല്‍ഡുകളാണ് ഈ ടേബിളില്‍ ഉള്ളത്.

Form ഡിസൈന്‍ ചെയ്തിരിക്കുന്നത് ചിത്രത്തില്‍ നോക്കുക


പ്രോഗ്രാം :

NEW ബട്ടണില്‍ ക്ലിക്ക് ചെയ്യുമ്പോള്‍ സീരിയല്‍ നമ്പര്‍ ഓട്ടോ ജനറേറ്റ് ചെയ്യുന്നു.Browse ബട്ടണില്‍ ക്ലിക്ക് ചെയ്ത് ഫോമിലെ pictureBox ല്‍ പടം വരുത്തുന്നു.എന്നിട്ട് സേവ് ബട്ടണില്‍ ക്ലിക്ക് ചെയ്യുമ്പോള്‍ ഡേറ്റാസ് ഡേറ്റാബേസില്‍ സേവ് ആകുന്നു.സ്റ്റുഡന്റ് നെയിം ലിസ്റ്റ് ബോക്സില്‍ സ്റ്റുഡന്റ് നെയിം ഡിസ്‌പ്ലേ ആകുന്നു. ഡേറ്റാ എഡിറ്റ് ചെയ്യാന്‍ സ്റ്റുഡന്റ് നെയിം ലിസ്റ്റ് ബോക്സിലെ ഒരു പേര് സെലക്ട് ചെയ്തിട്ട് SEARCH ബട്ടണില്‍ ക്ലിക്ക് ചെയ്താല്‍ അനുബന്ധമായ വിവരങ്ങള്‍ ഫോമിലെ ഫീല്‍ഡുകളില്‍ കാണിക്കും.EDIT ബട്ടണില്‍ ക്ലിക്ക് ചെയ്തിട്ട് ഡേറ്റാ എഡിറ്റ് ചെയ്ത് സേവ് ചെയ്യാം.ഡിലീറ്റ് ചെയ്യാന്‍ DELETE ബട്ടണില്‍ ക്ലിക്ക് ചെയ്യുക.
കോഡിങ്ങ് :
Imports System.Data.SqlClient
Imports System.IO


Public Class Form1
Dim con As New SqlConnection("Data Source=.;Initial Catalog=shibu;Integrated Security=True")
Dim formmode As String
formmode ഉപയോഗിക്കുന്നത് New ഉം EDIT ഉം തിരിച്ചറിയുന്നതിനു വേണ്ടിയാണ്. New
ല്‍ ക്ലിക്ക് ചെയ്യുമ്പോള്‍ formmode = "new" ആകുന്നു EDIT ല്‍ ക്ലിക്ക് ചെയ്യുമ്പോള്‍ formmode = "edit" ആകുന്നു.സേവ് ചെയ്യുമ്പോള്‍ ഈ ഫോം മോഡിന് അനുസരിച്ചാണ് ഇന്‍‌സേര്‍റ്റണ്‍ നടക്കുന്നത്.

browse ബട്ടണില്‍ ക്ലിക്ക് ചെയ്യുമ്പോള്‍ പടം PictureBox1 ലേക്ക് വരാനുള്ള കോഡ്..
OpenFileDialog വഴിയാണ് PictureBox1 ലേക്ക് പടങ്ങള്‍ കൊണ്ടുവരുന്നത്

Private Sub btn_browse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_browse.Click
With OpenFileDialog1
.InitialDirectory = "C:\Documents and Settings\shibu\My Documents\My Pictures"
.Filter = "AllFiles*.*"
End With
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
With PictureBox1

.Image = Image.FromFile(OpenFileDialog1.FileName)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.Fixed3D
End With
End If
End Sub

Private Sub btn_new_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_new.Click
Call fieldclear()
Call fieldunlock()
Call newid()
txt_regno.Focus()
formmode = "new"
End Sub

Public Sub fieldclear()
txt_slno.Clear()
txt_regno.Clear()
txt_stuname.Clear()
txt_class.Clear()
End Sub

ഓട്ടോ ജനറേറ്റ് ആയി സീരിയല്‍ നമ്പര്‍ ഉണ്ടാകുന്ന കോഡ്.NEW ബട്ടണില്‍ ഈ കോഡ് വിളിച്ചിട്ടുണ്ട്

Public Sub newid()
Dim cmd As New SqlCommand("select max(slno) from stuphoto", con)
Dim dr As SqlDataReader
con.Open()
dr = cmd.ExecuteReader
If dr.Read Then
If dr(0).ToString = DBNull.Value.ToString Then
txt_slno.Text = 1
Else
txt_slno.Text = dr(0) + 1
End If
End If
dr.Close()
con.Close()
End Sub

Private Sub btn_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_save.Click
If formmode = "new" Then
Call savepicture()
Call fieldclear()
Call fieldlock()
Else
Call rowdelete()
Call savepicture()
Call fieldclear()
Call fieldlock()
End If
End Sub

Public Sub savepicture()
Try
Dim memstream As New MemoryStream
Me.PictureBox1.Image.Save(memstream, PictureBox1.Image.RawFormat)
Dim stupicture() As Byte = memstream.GetBuffer
Dim cmd As New SqlCommand("select * from stuphoto", con)
Dim myadapter As New SqlDataAdapter(cmd)
Dim myset As New DataSet
Dim myrow As DataRow
con.Open()
myadapter.Fill(myset)
con.Close()
myrow = myset.Tables(0).NewRow
myrow(0) = Val(txt_slno.Text)
myrow(1) = txt_regno.Text
myrow(2) = txt_stuname.Text
myrow(3) = txt_class.Text
myrow(4) = stupicture
myset.Tables(0).Rows.Add(myrow)
Dim cb As New SqlCommandBuilder(myadapter)
con.Open()
myadapter.Update(myset)
con.Close()
PictureBox1.Image = Nothing
lb_stunamefill()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub


ഡേറ്റാസെറ്റ് വച്ച് ഡേറ്റാബേസിലെ സ്റ്റുഡന്റ് നെയുമുകള്‍ ലിസ്റ്റ് ബോക്സിലേക്ക് കൊണ്ടുവരുന്നതിനുള്ള കോഡ്

Public Sub lb_stunamefill()
Dim cmd As New SqlCommand("select slno,stuname from stuphoto", con)
Dim myadapter As New SqlDataAdapter(cmd)
Dim myset As New DataSet
con.Open()
myadapter.Fill(myset)
con.Close()
With lb_stuname
.DataSource = myset.Tables(0)
.DisplayMember = "stuname"
.ValueMember = "slno"
End With
End Sub


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call lb_stunamefill()
Call fieldlock()
End Sub


Private Sub btn_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_search.Click
If lb_stuname.SelectedIndex < 0 Then
MessageBox.Show("no images from the database")
Else
Dim cmd As New SqlCommand("select * from stuphoto", con)
Dim myadapter As New SqlDataAdapter(cmd)
Dim myset As New DataSet
con.Open()
myadapter.Fill(myset)
con.Close()
Dim arrpicture() As Byte = CType(myset.Tables(0).Rows(lb_stuname.SelectedIndex)("stuphoto"), Byte())
Dim ms As New MemoryStream(arrpicture)
With PictureBox1
.Image = Image.FromStream(ms)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.Fixed3D
End With
ms.Close()
txt_slno.Text = myset.Tables(0).Rows(lb_stuname.SelectedIndex)("slno").ToString
txt_regno.Text = myset.Tables(0).Rows(lb_stuname.SelectedIndex)("regno").ToString
txt_stuname.Text = myset.Tables(0).Rows(lb_stuname.SelectedIndex)("stuname").ToString
txt_class.Text = myset.Tables(0).Rows(lb_stuname.SelectedIndex)("stuclass").ToString
End If
End Sub


Private Sub btn_delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_delete.Click
Call rowdelete()
Call fieldclear()

End Sub

Public Sub fieldlock()
txt_regno.ReadOnly = True
txt_stuname.ReadOnly = True
txt_class.ReadOnly = True
End Sub


Public Sub fieldunlock()
txt_regno.ReadOnly = False
txt_stuname.ReadOnly = False
txt_class.ReadOnly = False
End Sub

Public Sub rowdelete()
Dim cmd As New SqlCommand("select * from stuphoto", con)
Dim myadapter As New SqlDataAdapter(cmd)
Dim myset As New DataSet
Dim cbd As New SqlCommandBuilder(myadapter)
con.Open()
myadapter.Fill(myset)
con.Close()
myset.Tables(0).Rows(lb_stuname.SelectedIndex).Delete()
con.Open()
myadapter.UpdateCommand = cbd.GetDeleteCommand
myadapter.Update(myset)
con.Close()
End Sub

Private Sub btn_edit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_edit.Click
fieldunlock()
formmode = "edit"
End Sub

End Class