En iyi yanıtlayıcılar
SQL'E ATTIĞIM BINARY VERİYİ C# İLE NASIL DOSYA HALİNE GETİREBİLİRİM ?

Soru
-
Çağrı gönderme projesi yapıyorum ve bu projede ek gönderme de olacak. Seçilen eki binarye çevirip sql e Atabiliyorum ama sqlden alıp dosyaya nasıl çevireceğimi bilemiyorum. Yardım lazım.
Dosyayı indirme işlemi olsa da yeter.
- Düzenleyen İbrahim_6516 1 Temmuz 2019 Pazartesi 10:31
Yanıtlar
-
Projem desktop.
Dosya tipi herhangi bir dosya olabilir bir sınırı yok img, mp3, exe vs..
Uzantısnını kaydetmedim
Dosya uzantısını da kaydedin, hatta dosya adı ile birlikte. Bunu db den alıp kullanıcının seçtiği klasöre yazdırırken default olarak gerekecek. ReadAllBytes ile okudunuz, WriteAllBytes ile de yazabilirsiniz. Şöyle yapabilirsiniz;
var item = DataBaseTablodanGelenVeriSatırı; var sfd = new SaveFileDialog { Title = "Kaydet", FileName = item.DosyaAdı }; if(sfd.ShowDialog() == DialogResult.Ok) { File.WriteAllBytes(item.Bytelar, sfd.FileName); }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak İşaretleyen İbrahim_6516 2 Temmuz 2019 Salı 08:41
Tüm Yanıtlar
-
Projeniz web mi? desktop mu? Web ise MVC mi WebForms mu?
Seçilen dosyayı binary'e çevirdiniz, peki dosyaların tipi nedir? tipleri aynımıdır, yoksa png, txt, exe, docx, xlsx vs. karışık mı? karışıksa database'e tipini kaydettiniz mi?
Projenizin ASP.Net MVC, tüm dosyalar txt uzantılı senaryosu için;
public class FilesController : Controller { private AppDataContext Db = new AppDataContext(); public FileResult ItemFile(int Id) => File(Db.Items.Find(Id).Dosya, "text/plain"); }
indirme linki için;
<a href="@url.Action("ItemFile", "Files", new { Id = Model.Id})">İndir</a>
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
-
"Binarye cevirip sql'e atabiliyorum" derken, neyi binary'e çeviriyorsunuz? Dosya zaten binary degil mi? Zaten binary olduguna gore, oraya olduğu gibi koyuyorsunuz. Alirken de normal binary alan gibi alıp diske yazarsınız.
Not: SQL'e derken, MS SQL server'a mi demek istiyorsunuz? Oyle oldugunu dusundum ama sormakta fayda var.
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
- Düzenleyen CetinBasozEditor 1 Temmuz 2019 Pazartesi 15:51
-
-
-
Projem desktop.
Dosya tipi herhangi bir dosya olabilir bir sınırı yok img, mp3, exe vs..
Uzantısnını kaydetmedim
Dosya uzantısını da kaydedin, hatta dosya adı ile birlikte. Bunu db den alıp kullanıcının seçtiği klasöre yazdırırken default olarak gerekecek. ReadAllBytes ile okudunuz, WriteAllBytes ile de yazabilirsiniz. Şöyle yapabilirsiniz;
var item = DataBaseTablodanGelenVeriSatırı; var sfd = new SaveFileDialog { Title = "Kaydet", FileName = item.DosyaAdı }; if(sfd.ShowDialog() == DialogResult.Ok) { File.WriteAllBytes(item.Bytelar, sfd.FileName); }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak İşaretleyen İbrahim_6516 2 Temmuz 2019 Salı 08:41
-
Çok teşekür ederim, buna benzer birşey denediğimde 'Access to the path 'C:\Users\xxx\Documents' is denied.'
hatası alıyordum. Bütün kullanıcılara full yetki vermeme rağmen yine oldu.
Aynı hatayı tekrardan alıyorum malesef.
'Access to the path 'C:\Users\xxx\Documents' is denied.'
- Düzenleyen İbrahim_6516 2 Temmuz 2019 Salı 10:51
-
-
-
Tahmin ettigim gibi binary'e çevirme yok :)
string conStr = @"server=.\SQLExpress;Trusted_Connection=yes;"; void Main() { var dosyalar = @" C:\Windows\hh.exe C:\Windows\notepad.exe C:\Windows\regedit.exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\DesignTools\SampleData\en\Images\Image01.png C:\Program Files (x86)\Microsoft Visual Studio 14.0\DesignTools\SampleData\en\Images\Image02.png C:\Program Files (x86)\Microsoft Visual Studio 14.0\DesignTools\SampleData\en\Images\Image03.png C:\Program Files (x86)\Microsoft Visual Studio 14.0\DesignTools\SampleData\en\Images\Image04.png C:\Program Files (x86)\Microsoft Visual Studio 14.0\DesignTools\SampleData\en\Images\Image05.png "; var outputTo = @"c:\SQLdenDosyalar"; if (!Directory.Exists(outputTo)) { Directory.CreateDirectory(outputTo); } CreateSampleDatabase(); foreach (var dosya in dosyalar.Split('\n').Where(d => !string.IsNullOrWhiteSpace(d))) { SaveDosya(dosya.Trim()); } ReadDosya("hh.exe", outputTo); ReadDosya("notepad.exe", outputTo); ReadDosya("regedit.exe", outputTo); ReadDosya("Images",outputTo); } private void CreateSampleDatabase() { using (SqlConnection connection = new SqlConnection(conStr)) { connection.Open(); new SqlCommand("create database BinaryDosyaSample", connection).ExecuteNonQuery(); new SqlCommand(@"create table BinaryDosyaSample..SampleTable (Id int identity not null primary key, dosya varbinary(max), orijinalismi varchar(500));", connection).ExecuteNonQuery(); connection.Close(); } } private void SaveDosya(string fileName) { using (SqlConnection connection = new SqlConnection(conStr)) using (SqlCommand cmd = new SqlCommand(@"insert into BinaryDosyaSample..SampleTable (dosya, orijinalismi) values (@dosya, @isim)",connection)) { cmd.Parameters.Add("@dosya", SqlDbType.VarBinary).Value = File.ReadAllBytes(fileName); cmd.Parameters.Add("@isim", SqlDbType.VarChar).Value = fileName; connection.Open(); cmd.ExecuteNonQuery(); connection.Close(); } } private void ReadDosya(string searchText, string outputLocation) { using (SqlConnection connection = new SqlConnection(conStr)) using (SqlCommand cmd = new SqlCommand(@"select * from BinaryDosyaSample..SampleTable where orijinalismi like @search", connection)) { cmd.Parameters.Add("@search", SqlDbType.VarChar).Value = "%"+searchText+"%"; connection.Open(); var reader = cmd.ExecuteReader(); while (reader.Read()) { var orijinal = (string)reader["orijinalismi"]; var dosya = (byte[])reader["dosya"]; File.WriteAllBytes( Path.Combine(outputLocation, Path.GetFileName(orijinal)), dosya); } connection.Close(); } }
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.