Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Bu siteyi Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.

0



Veritabanı yedeğini WinRar ile sıkıştırıp mail atmak

Merhaba arkadaşlar,

ASP.NET C#'da yapmış olduğum bir çalışmamda veritabanını Winrar ile sıkıştırıp mail atmak istiyorum, BSunu nasıl yapabilriim? Mail gönderme olayını yapıyorum ama sıkıştırma olayını yapamadım.

1 Cevap


0


1. Veritabanını yedekleme ve sıkıştırma zaman alacağından eşzamanlı olmayan programlama kullanıldı. Örnek kullanımı çalıştırın. İş Bu arada siz diğer işlemlere devam edersiniz. Arka planda ayrı bir işlem olarak çalıştırılır. Dosyanın oluşup oluşmadığını bilmeniz gerekiyorsa bu kodun içinden bunu bilemezsiniz. Başka bir yol bulmanız gerekir.

Web sitelerinde veritabanı büyüyünce işlem zaman aşımına uğrayacağından zaten bekleyemezsiniz.

2. Test edilmedi. Testini de siz yapın. Alıştırma olur.

  1. using System.IO;
  2. using System.IO.Compression;
  3. using System.Threading.Tasks;
  4. using System.Data.SqlClient;
  5. using System.Net.Mail;
  6. using System.Net.Mime;
  7. using System.Text;
  8.  
  9. // "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" - E - Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"
  10. // Örnek baglantı dizesi:
  11. // "Server = veritabaniSunucusuAdresiBuraya; Database = veritabaniAdiBuraya; User Id = kullaniciAdiBuraya; Password = veritabaniKullaniciSifresiBuraya;"
  12.  
  13. // Örnek kullanım:
  14.  
  15. /*
  16. VeritabaniYedeginiPostaylaGonder.VeritabaniYedegi.HazirlaVeGonder(
  17. "Server = veritabaniSunucusuAdresiBuraya; Database = veritabaniAdiBuraya; User Id = kullaniciAdiBuraya; Password = veritabaniKullaniciSifresiBuraya;",
  18. "veritabaniAdiBuraya",
  19. @"D:\GonderilenYedekler\VeritabaniAdi.bak",
  20. @"D:\GonderilenYedekler\VeritabaniAdi.zip",
  21. "Veritabanı yedeği",
  22. "Veritabanı yedeği ektedir",
  23. "yedegingonderilecegiadres@example.com"
  24. );
  25. */
  26. namespace VeritabaniYedeginiPostaylaGonder
  27. {
  28.  
  29. public class VeritabaniYedegi
  30. {
  31. const string GONDEREN_ADRES = "gonderenpostaadresi@gonderensiteadresiniyazin.com";
  32. const string GONDEREN_ADRES_SIFRESI = "sifreburaya";
  33. const string SMTP_CLIENT = "mail.gonderensiteadresiniyazin.com";
  34.  
  35. public static void HazirlaVeGonder(
  36. string baglantiDizesi,
  37. string veritabaniAdi,
  38. string yedekDosyasiYoluVeAdi,
  39. string zipDosyasiYoluVeAdi,
  40. string konu,
  41. string mesaj,
  42. string kime)
  43. {
  44. Task.Run(async () =>
  45. {
  46. var ret = await VeritabaniYedegi.Yedekle(baglantiDizesi, veritabaniAdi, yedekDosyasiYoluVeAdi);
  47. if (!ret) return;
  48. ret = await ZipArsivi.Olustur(new string[] { yedekDosyasiYoluVeAdi }, zipDosyasiYoluVeAdi);
  49. if (!ret) return;
  50. ret = await VeritabaniYedegi.VeritabaniYedeginiPostaylaGonder(konu, mesaj, yedekDosyasiYoluVeAdi, kime);
  51. });
  52. }
  53.  
  54. async public static Task<bool> VeritabaniYedeginiPostaylaGonder(string konu, string mesaj, string yedekDosyasiYoluVeAdi, string kime)
  55. {
  56. try
  57. {
  58. using (MailMessage Posta = new MailMessage(GONDEREN_ADRES, kime))
  59. {
  60. Posta.Subject = konu;
  61. Posta.BodyEncoding = Encoding.GetEncoding("utf-8");
  62. Posta.IsBodyHtml = true;
  63. Posta.Body = mesaj;
  64.  
  65.  
  66. Attachment data = new Attachment(yedekDosyasiYoluVeAdi, MediaTypeNames.Application.Octet);
  67. ContentDisposition disposition = data.ContentDisposition;
  68. disposition.CreationDate = System.IO.File.GetCreationTime(yedekDosyasiYoluVeAdi);
  69. disposition.ModificationDate = System.IO.File.GetLastWriteTime(yedekDosyasiYoluVeAdi);
  70. disposition.ReadDate = System.IO.File.GetLastAccessTime(yedekDosyasiYoluVeAdi);
  71. Posta.Attachments.Add(data);
  72.  
  73.  
  74. using (SmtpClient Istemci = new SmtpClient(SMTP_CLIENT, 25)) {
  75. Istemci.UseDefaultCredentials = false;
  76. Istemci.Credentials = new System.Net.NetworkCredential(GONDEREN_ADRES, GONDEREN_ADRES_SIFRESI);
  77. await Istemci.SendMailAsync(Posta);
  78. }
  79. }
  80. }
  81. catch
  82. {
  83. return false;
  84. }
  85. return true;
  86. }
  87.  
  88. async public static Task<bool> Yedekle(string baglantiDizesi, string veritabaniAdi, string yedekDosyasiYoluVeAdi)
  89. {
  90. try
  91. {
  92. if (File.Exists(yedekDosyasiYoluVeAdi)) File.Delete(yedekDosyasiYoluVeAdi);
  93. using (SqlConnection baglanti = new SqlConnection(baglantiDizesi))
  94. {
  95. baglanti.Open();
  96. using (SqlCommand cmd = new SqlCommand())
  97. {
  98. cmd.Connection = baglanti;
  99. cmd.CommandText = "BACKUP DATABASE " + veritabaniAdi + " TO DISK='" + yedekDosyasiYoluVeAdi + "'";
  100. await cmd.ExecuteNonQueryAsync();
  101. }
  102. }
  103. }
  104. catch
  105. {
  106. return false;
  107. }
  108. return true;
  109. }
  110. }
  111.  
  112. public class ZipArsivi
  113. {
  114. async public static Task<bool> Olustur(string[] dosyalar, string zipDosyasiYoluVeAdi, CompressionLevel seviye = CompressionLevel.Optimal)
  115. {
  116. var val = await Task.Run(() =>
  117. {
  118. if (File.Exists(zipDosyasiYoluVeAdi)) File.Delete(zipDosyasiYoluVeAdi);
  119. try
  120. {
  121. using (ZipArchive zip = ZipFile.Open(zipDosyasiYoluVeAdi, ZipArchiveMode.Create))
  122. {
  123. // Array.ForEach(dosyalar, dosya => zip.CreateEntryFromFile(dosya, Path.GetFileName(dosya), seviye));
  124. foreach (string dosya in dosyalar)
  125. {
  126. zip.CreateEntryFromFile(dosya, Path.GetFileName(dosya), seviye);
  127. }
  128. }
  129. }
  130. catch
  131. {
  132. return false;
  133. }
  134. return true;
  135. });
  136. return val;
  137. }
  138. }
  139.  
  140. }
  141.  



Cevaplayan: 27.05.21 21:42
cevapsitesi
102,040p 16ü

Bir cevap yazın: