C# access veri tabanından resim çekme hatası

hcici61

Öğrenci
Katılım
15 Temmuz 2015
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Access veri tabanına kaydettiğim resmi (resim adlı alan ve alan türü OLE Nesnesi) butona basıp pictureboxta tekrar veritabanından çekip göstermek istediğim zaman "Parameter is not valid" hatası alıyorum. Veri tabanına baktığımda resim var görünüyor ama kod algılama yapmıyor.


Kodlar:


try
{
if (con.State == ConnectionState.Closed) con.Open();


OleDbCommand cmd = new OleDbCommand("Select resim from deneme where TC='" + maskedTextBox1.Text + "'", con);
cmd.Parameters.AddWithValue("@TC", maskedTextBox1.Text);
con.Open();
Byte[] mydata = (Byte[])cmd.ExecuteScalar();
MemoryStream ms = new MemoryStream(mydata);
this.pctrboxresimsakla.Image = System.Drawing.Image.FromStream(ms);
con.Close();
}
catch (Exception ex) { MessageBox.Show("hata"+ex.Message); }

bunlarda resmi eklediğim kodlar:
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "Resim dosyaları |*.jpg;*.jpeg;*.gif;*.bmp;" +
"*.png;*ico|JPEG Files ( *.jpg;*.jpeg )|*.jpg;*.jpeg|GIF Files ( *.gif )|*.gif|BMP Files ( *.bmp )" +
"|*.bmp|PNG Files ( *.png )|*.png|Icon Files ( *.ico )|*.ico";
openDialog.Title = "Resim seçiniz.";
openDialog.InitialDirectory = Application.StartupPath + @"\\DataPicture";
if (openDialog.ShowDialog() == DialogResult.OK)
{
_resimsakla = openDialog.FileName.ToString();
pctrboxresimsakla.SizeMode = PictureBoxSizeMode.StretchImage;
pctrboxresimsakla.ImageLocation = _resimsakla;
}
openDialog.Dispose();
}
 

MrtAltg

Dekan
Emektar
Müdavim
Katılım
22 Şubat 2007
Mesajlar
9,834
Reaksiyon puanı
12,109
Puanları
2,958
resimi ole nesnesine yükleyip veritabanını şişirmektense metin olarak resim yolunu koysan daha iyi olur derim
 

kolay

Öğrenci
Katılım
5 Temmuz 2015
Mesajlar
22
Reaksiyon puanı
0
Puanları
0
Uyarıyı hangi satırda veriyor? Resim eklemeyle ilgili değil sanırım hatanız...Veri tabanına ekleme yaparken yeni eklediğiniz veri ile, databasedeki veri tipleri uyuşmuyor.
 

hcici61

Öğrenci
Katılım
15 Temmuz 2015
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
ekleme hatası değil bu. Benim resmi access veri tabanına ole nesnesi olarak kaydetmemde bi sıkıntı yok. Kaydettiğim veriyi tekrar TC kimlik numarasına göre çağırıp picturebox içerisinde göstermem lazım;

try {
if (con.State == ConnectionState.Closed) con.Open();


OleDbCommand cmd = new OleDbCommand("Select resim from deneme where TC='" + maskedTextBox1.Text + "'", con);
Image resmi = null;
OleDbDataReader oku = cmd.ExecuteReader();
while (oku.Read())
{
byte[] resim = (byte[])oku[0];
MemoryStream ms = new MemoryStream(resim, 0, resim.Length);
ms.Write(resim, 0, resim.Length);
resmi = Image.FromStream(ms, true);
pctrboxresimsakla.Image = resmi;
}
oku.Close();
con.Close();
}
catch (Exception ex) { MessageBox.Show("hata "+ex.Message); }

onun için bide bunu kullandım ama gene fayda etmiyor "Parameter is not valid" hatası veriyor
 

kolay

Öğrenci
Katılım
5 Temmuz 2015
Mesajlar
22
Reaksiyon puanı
0
Puanları
0
Resmi kaydetmiyor. Boyut sıfır olduğu için okuyacağı veri yok bence...
Hata
resmi = Image.FromStream(ms, true);
satırında sanırım.
 

hcici61

Öğrenci
Katılım
15 Temmuz 2015
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
Arkadaşlar sorun çözüldü. Ancak yöntem değiştirilerek yapılan bir çözüm.
Access gibi bir veri tabanında derleyici olmadığı için ben resmi kaydetsem bile resmi geri çağırdığımda derleyici olmamasından ötürü resmi tekrar decode edip sisteme yollamıyor program. Veri türü ne olursa olsun resmi veri tabanına kaydetmenizin hiçbir manası yok. Çözüme gelince; Çözüm basit resimleri bilgisayarda bir dosyada tutup ordan çekip kullanacaksınız. Böylece hem veritabanınızda şişirme yapmamış olacaksınız hemde veritabanınızın patlama ihtimaline karşı resimleriniz manuel olarak kullanımınıza açık olacak
 
Üst