Forum
merhaba arkadaşlar,
visual basic 2010 ve sql server 2008 kullanmaktayım.
öncelikle şunu beliteyim. sql server 2008 içerisinde
ıd=int, resim=image
adında iki column tanımladım. ben burası için visual basic form1 de kayıt işlemi yaptım. kodları aşağıdaki gibidir.
Private Sub btnac_Click(sender As System.Object, e As System.EventArgs) Handles btnac.Click
dosya.InitialDirectory = "c:\"
dosya.Title = "Dosya Seç"
dosya.FilterIndex = 1
dosya.Filter = ("Jpeg Resim Dosyası (*.jpg)|*.jpg|Gif Resim Dosyası (*.gif)|*.gif|Bmp Resim Dosyası(*.bmp)|*.bmp|Tüm Dosyalar(*.*)|*.*")
If dosya.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim ad As String
ad = dosya.FileName
pbox1.Image = Image.FromFile(ad)
pbox1.SizeMode = PictureBoxSizeMode.StretchImage
Label1.Text = dosya.SafeFileName
End If
End Sub
Private Sub kaydet_Click(sender As System.Object, e As System.EventArgs) Handles kaydet.Click
Dim dosyaAdi As String
dosyaAdi = dosya.FileName
If File.Exists(dosyaAdi) Then
Dim icerik As Byte() = ImageToStream(dosyaAdi)
adaptor = New SqlClient.SqlDataAdapter("INSERT INTO kaizentable (resim)VALUES ('" + dosya.FileName + "')", baglanti)
adaptor.Fill(kayit, "kaizentable")
MsgBox("Girilen resim veritabanına başarıyla kaydedildi.")
Else
MsgBox(dosyaAdi & " bulunamadı! ")
End If
End Sub
buraya kadar bir sorunum yok. asıl sorunum resimleri nasıl çağıracağım. aşağıdaki bir kod yazdım ama bir türlü picturebox ta gösteremedim.
nerede hata yapıyorum acaba kontrol edebilir misiniz.
ikinci bir form açtım. form üzerinde bir tane picturebox ,textbox ve button var. aşağıdaki yordamı butona yazdım. fakat PictureBox1.Image = datakayit("resim") kısmında hata veriyor.
adaptor = New SqlClient.SqlDataAdapter("select *from kaizentable where id='6' ", baglanti)
adaptor.Fill(kayit, "kaizentable")
datakayit = kayit.Tables(0).Rows(0)
TextBox1.Text = datakayit("id")
PictureBox1.Image = datakayit("resim")
arkadaşım yaptığın kodlamada söyle bir hata var resim yolunu tamamen değil sadece resmin adını kayıt yapacaksın veritabanına...
çağırmada ise bir toolbox dan image ekleyim ona da
örnek imgResim.Url="\\Resimler\kucuk"+drResim[ResimAdi].ToString();
şeklinde en basit şekli ile bu arkadaş kolay gelsin
visual basic.net kullanıyorum.
bahsettiğiniz kodlamayı tam anlayamadım. yani çözüm olarak bana kod yazabilir misiniz. ayrıca resimlerin sql de kaydedildiğini görüyorum. datagridwiev de ilgili column da dosya simgesi var. sadece sql deki fotoyu picturbox a aktaramıyorum. ayrıca visual basicte toolbax ta image denen bişi yokçi. orada sadece picturebox var. 🙂
kusura bakma şöyle olacak mantık olarak
PictureBox1.Image = resimyolu datakayit("resim")
resimin bulunduğu klasörü belirtmen lazım ben sana öyle diyeyim
Merhaba,
Servet beyin bahsettiği kodlama resimlerin kendisini değilde isimlerini veritabanına string olarak yazmakla alakalı.
Ancak siz resmin kendisini veritabanına kaydetmişsiniz. Bu durumda yoluna ihtiyacınız yok, zaten bir klasorde yok anladığım kadarı ile.
Bir stream nesnesi ile resmi alıp o şekilde okuyabilirsiniz. Araştırırsanız birçok örneği mevcut webde.
merhaba,
cevabınız için teşekkür ederim. doğru bir teşhiste bulunmuşsunuz. acaba nasıl bir kod yazabilirim. yardımcı olmanız mümkün mü
Merhaba,
Servet beyin bahsettiği kodlama resimlerin kendisini değilde isimlerini veritabanına string olarak yazmakla alakalı.
Ancak siz resmin kendisini veritabanına kaydetmişsiniz. Bu durumda yoluna ihtiyacınız yok, zaten bir klasorde yok anladığım kadarı ile.
Bir stream nesnesi ile resmi alıp o şekilde okuyabilirsiniz. Araştırırsanız birçok örneği mevcut webde.
feride hanıma katılıyorum anlatmak istediğim bu idi ama pek başarılı olmamışım sanırım kusura bakma arkadaşım
Merhaba
Öncelikle ilgili resmi sql tablolarına kayıt ederken data type değerinin image olduğuna dikkat ediniz. Resmi yükledikten sonra .net kodlarınız aşağıdaki olursa sorunuz kalmayacak diye düşünüyorum;
SqlConnection con = new SqlConnection(Connections.GetConnectionString());//Database bağlantı
SqlCommand cmd = new SqlCommand("Select Substring([Resim],8,DataLength([Resim])) from Resimler", con);//Sorguda dikkat etmen gereken resim datasında ilk 8 karakteri kesmen gerekiyor
SqlDataAdapter adp = new SqlDataAdapter(cmd);// DataAdapter oluştur
DataTable dt = new DataTable();
try
{
if (con.State == ConnectionState.Closed)
con.Open();
adp.Fill(dt);
if (dt.Rows.Count > 0)//check whether data table contain any row or not
{
MemoryStream ms = new MemoryStream((byte[])dt.Rows[0]["Resim"]);
PictureBox1 .Image = Image.FromStream(ms);
PictureBox1 .SizeMode = PictureBoxSizeMode.StretchImage;
PictureBox1 .Refresh();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Normal şartlarda memorystream kullanırken "Parameter is not valid" hatası alırsın. Burada püf nokta SQL sorgusunu yazarken resim alanında 8 karakteri substring yapman gerekiyor.
Umarım işine yarar. Herhangi bir sorun da iletişime geçebilirsin.