none
SQL'E ATTIĞIM BINARY VERİYİ C# İLE NASIL DOSYA HALİNE GETİREBİLİRİM ? RRS feed

  • 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.

    1 Temmuz 2019 Pazartesi 10:28

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
    2 Temmuz 2019 Salı 08:26
    Moderatör

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

    1 Temmuz 2019 Pazartesi 12:14
    Moderatör
  • "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.


    1 Temmuz 2019 Pazartesi 15:50
    Yanıtlayıcı
  • Projem desktop.

    Dosya tipi herhangi bir dosya olabilir bir sınırı yok img, mp3, exe vs..

    Uzantısnını kaydetmedim

    2 Temmuz 2019 Salı 05:54
  • byte[] byt;
                openFileDialog1.ShowDialog();
                if (!string.IsNullOrEmpty(openFileDialog1.FileName))
                {
                    ekSayac++;
                    string path = openFileDialog1.FileName;
                    byt = File.ReadAllBytes(path);
                    
    
    
                }
    Brlirtilen dosya mssql' e binary data şeklinde kaydediyorum
    2 Temmuz 2019 Salı 05:55
  • 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
    2 Temmuz 2019 Salı 08:26
    Moderatör
  • Ç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.'


    2 Temmuz 2019 Salı 08:33
  • Bunun yetki ile ilgisi yok! dosya adı vermiyorsunuz, dosyanın byte'larını klasör olarak yazmaya çalışıyorsunuz sanırım.

    C:\Users\bimsoft\Documents\birdosyaadı.ext

    şeklinde olmalı


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    2 Temmuz 2019 Salı 08:36
    Moderatör
  • Haklısınız çok teşekkür ederim.
    2 Temmuz 2019 Salı 08:41
  • 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.

    2 Temmuz 2019 Salı 19:06
    Yanıtlayıcı