PDA

View Full Version : show,delete,update,insert عکس



oggiii
شنبه 10 بهمن 1388, 14:49 عصر
سلام به همه دوستان مخصوصا کسایی که برای یادگیری دیگران هم وقت میزارن واقعا تشکر :تشویق:

من این مطلب جستجو کردم چیزی پیدا نکردم یا به زبان سی بود
اگه میشه
درج عکس توی دیتابیس
نمایش عکس از دیتابیس در picturebox (منظورم اینه وقتی جستجو میکنی عکس مربوط نمایش داده بشه)
حذف عکس از دیتابیس
آپدیت عکس در دیتابیس

اینجا بزارید ممنون میشم (زبان vb.net و sql2000 )

تشکر

armin8651
شنبه 10 بهمن 1388, 15:59 عصر
اینم یک نمونه
با توجه به اسم پایگاه داده و جداول و .... واسش دیتا بیس بساز
مثال خوبیه

oggiii
شنبه 10 بهمن 1388, 17:13 عصر
اینم یک نمونه
با توجه به اسم پایگاه داده و جداول و .... واسش دیتا بیس بساز
مثال خوبیه
من یه جدول درست کردم به نام ax که 2تا فیلد داره به نام name از نو nvarchar و pic از نوع image
بعد یه تغییراتی هم توی کد درج دادم ولی ارور داد مشکل از کجاست ؟؟

error

The request for procedure 'ax' failed because 'ax' is a table object.


source

Public Function InsertImage(ByRef buffer, ByVal str)
Dim cn As New SqlConnection("Data Source=.;Initial Catalog=pictures;Integrated Security=True")
cn.Open()
Dim cmd As New SqlClient.SqlCommand("ax", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text
cmd.Parameters.Add("@pic", SqlDbType.Image).Value = Buffer
cmd.ExecuteNonQuery()
MsgBox("Image inserted")
cn.Close()
End Function
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim st As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Dim s As String = TextBox1.Text
Dim mbr As BinaryReader = New BinaryReader(st)
Dim buffer(st.Length) As Byte
mbr.Read(buffer, 0, CInt(st.Length))
st.Close()
InsertImage(buffer, s)
End Sub

Navid Asadi
شنبه 10 بهمن 1388, 17:20 عصر
بقدری در این باره بحث شده که با یک جستوجو در این رابطه کلی صفحه پیدا میشه...

من یه جدول درست کردم به نام ax که 2تا فیلد داره به نام name از نو nvarchar و pic از نوع image
بعد یه تغییراتی هم توی کد درج دادم ولی ارور داد مشکل از کجاست ؟؟

error
کد:
The request for procedure 'ax' failed because 'ax' is a table object.

source
کد:
Public Function InsertImage(ByRef buffer, ByVal str)
Dim cn As New SqlConnection("Data Source=.;Initial Catalog=pictures;Integrated Security=True")
cn.Open()
Dim cmd As New SqlClient.SqlCommand("ax", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text
cmd.Parameters.Add("@pic", SqlDbType.Image).Value = Buffer
cmd.ExecuteNonQuery()
MsgBox("Image inserted")
cn.Close()
End Function
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim st As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Dim s As String = TextBox1.Text
Dim mbr As BinaryReader = New BinaryReader(st)
Dim buffer(st.Length) As Byte
mbr.Read(buffer, 0, CInt(st.Length))
st.Close()
InsertImage(buffer, s)
End Sub
__________________

جوابش همینه

oggiii
شنبه 10 بهمن 1388, 17:27 عصر
بقدری در این باره بحث شده که با یک جستوجو در این رابطه کلی صفحه پیدا میشه...


جوابش همینه

اما این خیلی پینچیدست من هرکاریش کردم نشد !!!

پس این چیه توی برنامه

Me.SqlConnection1.ConnectionString = "data source=localhost;initial catalog=hemanthdata;integrated security=SSPI;persis" & _
"t security info=False;workstation id=HEMANTH;packet size=4096"
'
'SqlCommand1
'sp_InsertPhoto
Me.SqlCommand1.CommandText = "dbo.[ax]"
Me.SqlCommand1.CommandType = System.Data.CommandType.StoredProcedure
Me.SqlCommand1.Connection = Me.SqlConnection1
Me.SqlCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, False, CType(10, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
Me.SqlCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50))
Me.SqlCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@image", System.Data.SqlDbType.VarBinary, 2147483647))


اگه سورس مفهوم تری دارید لطفا بزارید

oggiii
شنبه 10 بهمن 1388, 17:50 عصر
این فایل که میزارم برنامه درج عکس به همراه فایل دیتابیسش هست که باید اتچش (attach) کنید اگه میشه دانلودش کنید بگید مشکلش چیه ممنون میشم
اگه توی همون بتونید حذف و آپدیتو جستجوشو بزارید که دیگه خیلی خیلی ممنونتون میشم اگر هم که نه بگید مشکلش چیه

armin8651
شنبه 10 بهمن 1388, 18:32 عصر
من یه جدول درست کردم به نام ax که 2تا فیلد داره به نام name از نو nvarchar و pic از نوع image
بعد یه تغییراتی هم توی کد درج دادم ولی ارور داد مشکل از کجاست ؟؟

error

The request for procedure 'ax' failed because 'ax' is a table object.


source

Public Function InsertImage(ByRef buffer, ByVal str)
Dim cn As New SqlConnection("Data Source=.;Initial Catalog=pictures;Integrated Security=True")
cn.Open()
Dim cmd As New SqlClient.SqlCommand("ax", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text
cmd.Parameters.Add("@pic", SqlDbType.Image).Value = Buffer
cmd.ExecuteNonQuery()
MsgBox("Image inserted")
cn.Close()
End Function
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim st As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Dim s As String = TextBox1.Text
Dim mbr As BinaryReader = New BinaryReader(st)
Dim buffer(st.Length) As Byte
mbr.Read(buffer, 0, CInt(st.Length))
st.Close()
InsertImage(buffer, s)
End Sub


Dim cmd As New SqlClient.SqlCommand("ax", cn)

تو این دستور باید به جای ax اسم stored procedure که برای insret تو جدول ax می سازی رو بنویسی
تو sql server 2000 هم که راحت میشه از طربق wizardسه stored procedure برای inset,update , delete ساخت

oggiii
شنبه 10 بهمن 1388, 18:37 عصر
Dim cmd As New SqlClient.SqlCommand("ax", cn)

تو این دستور باید به جای ax اسم stored procedure که برای insret تو جدول ax می سازی رو بنویسی
تو sql server 2000 هم که راحت میشه از طربق wizardسه stored procedure برای inset,update , delete ساخت

میشه یکم بیشتر توضیح بدی درمورد ویزارد چون من هیچی نمیدونم از کجا و باید چطوری درستش کنم ؟؟؟

armin8651
شنبه 10 بهمن 1388, 18:45 عصر
میشه یکم بیشتر توضیح بدی درمورد ویزارد چون من هیچی نمیدونم از کجا و باید چطوری درستش کنم ؟؟؟
تو این لینک درباره ساخت DB و wiew و stored procedure و ... تو sql server 2000 توضیح داده:

http://www.lupforum.com/index.php/topic,284.0.html


wizard هم تو اون منو بالا میتونی پیداش کنی

http://tinypic.info/files/ldl1urn88uvtfroifh0o.jpg

oggiii
شنبه 10 بهمن 1388, 19:04 عصر
تو این لینک درباره ساخت DB و wiew و stored procedure و ... تو sql server 2000 توضیح داده:

http://www.lupforum.com/index.php/topic,284.0.html


wizard هم تو اون منو بالا میتونی پیداش کنی

http://tinypic.info/files/ldl1urn88uvtfroifh0o.jpg

ممنون
خوب این توضیحات رو خوندم چطوری میشه ازشون توی ویبی دات نت استفاده کرد :خجالت: ؟؟؟

armin8651
شنبه 10 بهمن 1388, 19:08 عصر
ممنون
خوب این توضیحات رو خوندم چطوری میشه ازشون توی ویبی دات نت استفاده کرد :خجالت: ؟؟؟

خوب واسه اون جدول که ساخته بودی stored procedure برای insert بساز بعد اسم stored procedure رو همون جا که گفتم بنویس و برنامه رو اجرا بگیر

oggiii
شنبه 10 بهمن 1388, 19:22 عصر
خوب واسه اون جدول که ساخته بودی stored procedure برای insert بساز بعد اسم stored procedure رو همون جا که گفتم بنویس و برنامه رو اجرا بگیر

این ارورو داد !!!!


@name is not a parameter for procedure insert_ax_1.

armin8651
شنبه 10 بهمن 1388, 20:46 عصر
این ارورو داد !!!!


@name is not a parameter for procedure insert_ax_1.

برو تو قسمت stored procedure های پايگاه داده که ساختی، رو insert_ax_1 راست کليک کن و گزينه propeties رو برو تا کد های stored procedure رو ببينی. اولش ميبينی که چند تا متغير تعريف کرده، اسم اون متغير ها رو بايد به جای @name و @pic تو تو اين قسمت از کد بزاری:


cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text
cmd.Parameters.Add("@pic", SqlDbType.Image).Value = Buffer


اينا ديگه ربطی به نحوه ذخيره کردن عکس نداره، نحوه استفاده از stored procedure هستش :لبخند:

oggiii
شنبه 10 بهمن 1388, 23:02 عصر
برو تو قسمت stored procedure های پایگاه داده که ساختی، رو insert_ax_1 راست کلیک کن و گزینه propeties رو برو تا کد های stored procedure رو ببینی. اولش میبینی که چند تا متغیر تعریف کرده، اسم اون متغیر ها رو باید به جای @name و @pic تو تو این قسمت از کد بزاری:


cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text
cmd.Parameters.Add("@pic", SqlDbType.Image).Value = Buffer


اینا دیگه ربطی به نحوه ذخیره کردن عکس نداره، نحوه استفاده از stored procedure هستش :لبخند:
واقعا شرمنده اذیت شدید
خیلی ممنون از راهنماییهات دوسته عزیز

کاش این دستورات رو خط به خط توضیح میدادید که یاد میگرفتم اما بازم اینی که گفتیدو انجام دادم ولی نشد
این سورس برنامم هست

Dim cn As New SqlConnection("Data Source=.;Initial Catalog=pic;Integrated Security=True")
cn.Open()
Dim cmd As New SqlClient.SqlCommand("insert_ax_1", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@name_1", SqlDbType.NVarChar).Value = TextBox1.Text
cmd.Parameters.Add("@pic_2", SqlDbType.Image).Value = buffer
cmd.ExecuteNonQuery()
MsgBox("Image inserted")
cn.Close()

این stored procedure


CREATE PROCEDURE [insert_ax_1]
(@name_1 [nvarchar](30),
@pic_2 [image])

AS INSERT INTO [pic].[dbo].[ax]
( [name],
[pic])

VALUES
( @name_1,
@pic_2)
GO


این ERROR

String or binary data would be truncated. The statement has been terminated.


ببینید واسه isert متن این کد چقدر قابل فهم و مفهوم هست

Dim a As New SqlConnection
Dim b As New SqlCommand
a.ConnectionString = "Data Source=.;Initial Catalog=test;Integrated Security=True"
b.Connection = a
b.CommandType = CommandType.Text
b.CommandText = "use test insert into sabt values('" & TextBox1.Text & "','" & TextBox2.Text & "')"
b.Connection = a
b.Connection.Open()
b.ExecuteNonQuery()
b.Connection.Close()


یاواسه اپدیت این سورس زیر


Dim a As New SqlConnection
Dim b As New SqlCommand
Dim c As New SqlDataAdapter
a.ConnectionString = "Data Source=.;Initial Catalog=test;Integrated Security=True"
c.SelectCommand = b
c.SelectCommand.CommandType = CommandType.Text
c.SelectCommand.CommandText = "update sabt set name=@name where code=@code"
b.Parameters.AddWithValue("@code", TextBox1.Text)
b.Parameters.AddWithValue("@name", TextBox2.Text)
c.SelectCommand.Connection = a
b.Connection.Open()
b.ExecuteNonQuery()
b.Connection.Close()
MsgBox(" it's oK")

نمیشه واسه درج عکس البته ادرسش عکس یه کد همنطوری قابل فهم پیدا کرد !!
ممنون

armin8651
شنبه 10 بهمن 1388, 23:34 عصر
چند روز دیگه یه برنامه کامل کار با عکس و پایگاه داده برات میذارم

oggiii
شنبه 10 بهمن 1388, 23:58 عصر
چند روز دیگه یه برنامه کامل کار با عکس و پایگاه داده برات میذارم

خیلی ممنون ارمین جان از تمام کمک و راهنماییت
اما خیلی ساده تر از اون بود که فکرشو می کردم و تونستم انجامش بدم و توضیح میدم که چی کار کردم که بقیه هم استفاده کنند

اول امدم از طریق یه openfiledialog یه عکس رو گرفتم و ادرس رو توی یک lable گزاشتم به صورت زیر



dim fname as string

OpenFileDialog1.ShowDialog()
fname = OpenFileDialog1.FileName
PictureBox1.BackgroundImage = Image.FromFile(fname)
PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
Label1.Text = fname


بعد برای ذخیره امدم اون ادرس که توی fname در lable ذخیره شده بود رو به به صورت رشته به بانک اضافه کردم به این صورت


Dim a As New SqlConnection
Dim b As New SqlCommand
a.ConnectionString = "Data Source=.;Initial Catalog=pic;Integrated Security=True"
b.Connection = a
b.CommandType = CommandType.Text
b.CommandText = "use pic insert into ax values('" & TextBox1.Text & "','" & Label1.Text & "')"
b.Connection = a
b.Connection.Open()
b.ExecuteNonQuery()
b.Connection.Close()
MsgBox("با موفقیت ذخیره شد")


برای جستجو هم اینکارو انجام دادم یعنی ادرس رو در اوردم از دیتابیس بعد اونو ریختم توی fname و picturebox رو از fname گرفتم


Dim a As New SqlConnection
Dim b As New SqlCommand
Dim c As New SqlDataAdapter
a.ConnectionString = "Data Source=.;Initial Catalog=pic;Integrated Security=True"
c.SelectCommand = b
c.SelectCommand.CommandType = CommandType.Text
c.SelectCommand.CommandText = "select * from ax where name='" & TextBox1.Text & "'"
c.SelectCommand.Connection = a
Dim d As New DataSet
d.Clear()
c.Fill(d, "ax")
If d.Tables(0).Rows.Count > 0 Then
TextBox1.Text = d.Tables(0).Rows(0).Item("name")
fname = d.Tables(0).Rows(0).Item("pic")
PictureBox1.BackgroundImage = Image.FromFile(fname)
PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
d.Clear()
c.Fill(d)
MsgBox(" found")
Else
MsgBox("not found")
End If


نظرتون چیه !! مشکلی که نداره این کار ؟!

armin8651
یک شنبه 11 بهمن 1388, 00:30 صبح
این کار فقط آدرس عکس ها رو تو پایگاه داده ذخیره می کنه و اگه برنامه و پایگاه داده رو تو یه سیستم دیگه ببری دیگه از عکس هات خبری نیست ، این روش معمولآ پیشنهاد نمیشه
اون روش خود عکس رو تو پایگاه داده ذخیره میکنه و پایگاه داده رو هر جا ببری عکس ها هم باهاش هست

oggiii
یک شنبه 11 بهمن 1388, 00:49 صبح
[QUOTE=armin8651;899931]اه ؟؟

oggiii
یک شنبه 11 بهمن 1388, 00:51 صبح
این کار فقط آدرس عکس ها رو تو پایگاه داده ذخیره می کنه و اگه برنامه و پایگاه داده رو تو یه سیستم دیگه ببری دیگه از عکس هات خبری نیست ، این روش معمولآ پیشنهاد نمیشه
اون روش خود عکس رو تو پایگاه داده ذخیره میکنه و پایگاه داده رو هر جا ببری عکس ها هم باهاش هست

بله حق باشماست ، اما اینهم در نظر بگیرید که چقدر سرعت بالا میره و حجم دیتابیس کمتره میشه
همیشه اساتید دانشگاه هم پیشنهاد میکردن که ادرس عکس رو ذخیره کنی بهتر هست.

حالا یه سئوال دارم :
من الان از این روش استفاده کردم درسته ، میخوام وقتی کاربر عکس رو از هر درایوی که انتخاب میکه یه نسخه از اون عکس کپی بشه توی مثلا "c:\pictures " این ادرس جدید توی دیتابیس ذخیره بشه همچین چیزی میشه ؟؟
یعنی اگر فایلی به نام car توی درایو D هست با همون نام بره توی "c:\pictures" و حالا این c:\pictures\car توی دیتابیس ذخیره بشه

armin8651
یک شنبه 11 بهمن 1388, 10:44 صبح
برای این که سرعت پایین نیاد روش استاندارد اینه که از یک پایگاه داده جداگانه برای عکس عا استفاده کنیم ، یعنی تو دو تا رشته ارتباط داریم در این حالت
ببخشید ولی اون اساتید اشتباه می کنن ، امکان نداره تو سیستم های بزرگ بشه از این روش استفاده کرد.:لبخندساده:

oggiii
یک شنبه 11 بهمن 1388, 12:46 عصر
برای این که سرعت پایین نیاد روش استاندارد اینه که از یک پایگاه داده جداگانه برای عکس عا استفاده کنیم ، یعنی تو دو تا رشته ارتباط داریم در این حالت
ببخشید ولی اون اساتید اشتباه می کنن ، امکان نداره تو سیستم های بزرگ بشه از این روش استفاده کرد.:لبخندساده:

درسته ، اما من از اون مثالی که واسم گذاشتید هیچی سر درنیاوردم ، یکم واسه من که مبتدیم پیچیده بود:افسرده:

منتظر اون مثالی هستم که گفتید قرار بزارید همراه با دیتابیس

تشکر

armin8651
یک شنبه 11 بهمن 1388, 13:34 عصر
درسته ، اما من از اون مثالی که واسم گذاشتید هیچی سر درنیاوردم ، یکم واسه من که مبتدیم پیچیده بود:افسرده:

منتظر اون مثالی هستم که گفتید قرار بزارید همراه با دیتابیس

تشکر

حتمآ میذارم :چشمک: