1. sayfa
|
Dr_Hack merhaba; Aşağıda verdiğim kodu Delphi.NET için yazmıştım. Aynı sınıfları kullandıkları için C#’a uyarlayabilirsin. İçeriğini veritabanına yazmak istediğim resim dosyasını FileStream sınıfından yararlanıp byte byte okuyup Byte tipindeki dizi değişkene aktardım. Bu kodda kullanıcının seçtiği resim dosyasının adı formdaki 5. TextBox’a yazılmaktadır. Var Akis : FileStream; Uzunluk : Integer; Dizi : Array of Byte; Yol : String; begin Yol := TextBox5.Text; Akis := FileStream.Create(Yol, FileMode.Open, FileAccess.Read); Uzunluk :=Akis.Length; SetLength(Dizi, Uzunluk); Akis.Read(Dizi,0, Uzunluk); Ekle_Command.Parameters.Add('@Par1', SqlDbType.Char, 25, 'Marka_model'); Ekle_Command.Parameters.Add('@Par2', SqlDbType.DateTime); Ekle_Command.Parameters.Add('@Par3', SqlDbType.Int); Ekle_Command.Parameters.Add('@Par4', SqlDbType.Int); Ekle_Command.Parameters.Add('@Par5', SqlDbType.Binary); Ekle_Command.Parameters[1].SourceColumn := 'Trafik_cikis'; Ekle_Command.Parameters[2].SourceColumn := 'Agirlik'; Ekle_Command.Parameters[3].SourceColumn := 'Motor_hacmi'; Ekle_Command.Parameters[4].SourceColumn := 'Resim'; Ekle_Command.Parameters[0].Value:= TextBox1.Text; Ekle_Command.Parameters[1].Value:= Convert.ToDateTime(TextBox2.Text); Ekle_Command.Parameters[2].Value:= TextBox3.Text; Ekle_Command.Parameters[3].Value:= TextBox4.Text; Ekle_Command.Parameters[4].Value:=Dizi; Ekle_Command.CommandText := 'INSERT INTO Arabalar(Marka_model, Trafik_cikis, Agirlik, Motor_hacmi, Resim)'+ ' VALUES(@Par1, @Par2, @Par3, @Par4, @Par5)'; Ekle_command.ExecuteNonQuery; end; |
dostum mantık acısından olay şudur. bir cok resmi image olarak atarsan ilerde veritabanın cok şişer. Bunun yerine resmin bulundugu yerin adresini isim kaydeder gibi kaydediyorsun. Mesela bir ismi textbox a aktarmak yerine, bu resmin uzantısını bir picturebox'ın ilgili özelliğine aktarıyorsun. |
| Resim dosyalarını veritabanında serileştirip saklarsan,daha güvenli ,daha kolay taşınabilir bir yapı elde edersin,ancak daha düşük bir performansla yetinmek zorunda kalırsın.Arkadaşların dediği gibi path saklamak,özel bir ihtiyaç yoksa,genelde yeterli ve mantıklı olan çözümdür. |
| evet o mantığı anladımda onu nasıl yapıcam ben biraz yeniyim c# ta ..onda da yardımcı olursanız size zahmet |
|
Forma 2 düğme, 2 TextBox, bir PictureBox, SqlConnection, SqlCommand ve OpenFileDialog yerleştirdim. Resim_sec adını verdiğim düğme tıklanıp resim dosyası seçilecek. Bu nedenle forma bir OpenFileDilaog nesnesi yerleştirip “Resim Seç” düğmesi tıklandığı zaman işletilmek üzere aşağıda verdiğim kodu hazırladım. private void Resim_sec_Click(object sender, EventArgs e) { string Dosya; openFileDialog1.Filter = "Resim Dosyaları |*BMP"; openFileDialog1.ShowDialog(); Dosya = openFileDialog1.FileName; textBox2.Text = Dosya; pictureBox1.Image = System.Drawing.Bitmap.FromFile(Dosya); } Bu kodda kullanıcının seçtiği resim dosyasının adı formdaki 2. TextBox’a yazılmakta¬dır. Kaydı yapılmak istenen arabanın resmi bu şekilde seçildikten sonra geriye kaydı verita¬banına yazmak kaldı. Bu amaçla “Kaydet” adını verdiğim düğmenin Click() yordamını aşağı¬daki gibi düzenledim. private void Kaydet_Click(object sender, EventArgs e) { FileStream Akis; long Uzunluk; byte[] Dizi; string Yol; Yol = textBox2.Text; Akis = new FileStream(Yol, FileMode.Open, FileAccess.Read); Uzunluk = Akis.Length; Dizi = new byte[Uzunluk]; Akis.Read(Dizi, 0, Dizi.Length); sqlCommand1.Parameters.Add("@Par1", SqlDbType.Char, 25, "araba"); sqlCommand1.Parameters.Add("@Par2", SqlDbType.Binary); sqlCommand1.Parameters[0].Value = textBox1.Text; sqlCommand1.Parameters[1].Value = Dizi; sqlCommand1.Parameters[0].SourceColumn = "araba"; sqlCommand1.Parameters[1].SourceColumn = "Resim"; sqlCommand1.CommandText = "INSERT INTO Arabalar(Araba, Resim) VALUES(@Par1, @Par2)"; sqlCommand1.ExecuteNonQuery(); } Bu kodda yabancısı olduğunuz veya şimdiye kadar bu kitapta söz edilmeyen herhangi bir deyim veya metot yoktur. İçeriğini veritabanına yazmak istediğim resim dosyasını FileStream sınıfından yararlanıp byte byte okuyup Byte tipindeki dizi değişkene aktardım. Bu kodu biraz geliştirip veritabanlarına kolayca resim kaydını gerçekleştirebilirsiniz. Bu kodu Delphi.NET kitabımdan alıp C#'a uyarladım. Başımı belaya sokan "Dizi" adlı değişkeni alışkanlıktan burada da kullanmışım. Yakında yayınlanacak yeni C# kitabımın ikinci cildini kaleme alırken tekrar sanık durumuna düşmemek için "dizi" adını verdiğim değişken başka bir işim bulmam gerekecek. Ne olur olmaz "Zirvedeki Beyinler" adı altında programcılık kitabı yazan saygıdeğer yazarlar beni tekrar sanık durumuna getirebilirler. |
ustad saol ama kaydet butonuna yazılırken hata verdi sınıf hakkında.. |
| Kullanılan namespace'lerden birisini koda dahil etmemiş olabilirsiniz. Stream sınıfları System.IO'de bulunmaktadır. |
ok saol üstad unutmuşum .. |
1. sayfa
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.