Thứ Hai, 18 tháng 6, 2012

Sửa lỗi database bị Suspect trong MS SQL Server

Dùng câu lệnh sau để set ONLINE cho database bị SUSPECT
  1. ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE  
  2.   
  3. GO  
  4.   
  5. DBCC CHECKDB ([DatabaseName], REPAIR_ALLOW_DATA_LOSS)  
  6.   
  7. GO  
  8.   
  9. ALTER DATABASE [DatabaseName] SET MULTI_USER WITH ROLLBACK IMMEDIATE  
  10.   
  11. GO  
  12.   
  13. ALTER DATABASE [DatabaseName] SET ONLINE  
  14.   
  15. GO  
  16.       

Mã hóa MD5 trong C# ASP.NET

Hàm mã hóa MD5 một chuỗi:
  1. public static string GetMD5(string str)  
  2. {  
  3.   
  4.             MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();  
  5.   
  6.             byte[] bHash = md5.ComputeHash(Encoding.UTF8.GetBytes(str));  
  7.   
  8.             StringBuilder sbHash = new StringBuilder();  
  9.   
  10.             foreach (byte b in bHash)  
  11.             {  
  12.   
  13.                 sbHash.Append(String.Format("{0:x2}", b));  
  14.   
  15.             }  
  16.   
  17.             return sbHash.ToString();  
  18.   
  19. }   
  20.       
Tuy nhiên mình rất thích sử dụng theo kiểu Extension:
  1. public static string ToMD5(this string str)  
  2. {  
  3.   
  4.             MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();  
  5.   
  6.             byte[] bHash = md5.ComputeHash(Encoding.UTF8.GetBytes(str));  
  7.   
  8.             StringBuilder sbHash = new StringBuilder();  
  9.   
  10.             foreach (byte b in bHash)  
  11.             {  
  12.   
  13.                 sbHash.Append(String.Format("{0:x2}", b));  
  14.   
  15.             }  
  16.             return sbHash.ToString();  
  17.   
  18. }   
  19.       
Lúc này thay vì :
string str = "abc";
string md5 = GetMD5(str);
mình gọi theo kiểu:
string md5 = str.ToMD5(); thấy pro hơn phải không mọi người. ^^!

Xuất dữ liệu từ DataGridView ra Excel trong ASP.NET ( Export DataGridView To Excel in ASP.NET)

Cái này tham khảo từ các tiền bối thôi ^^!
  1. private static void ExportDataGridViewToExcel(Control dtg, string fileName)  
  2. {  
  3.   
  4.         HttpContext.Current.Response.AppendHeader("Content-Disposition""attachment;filename=" + fileName);  
  5.   
  6.         HttpContext.Current.Response.Charset = "UTF-8";  
  7.   
  8.         HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;  
  9.   
  10.         HttpContext.Current.Response.ContentType = "application/ms-excel";  
  11.   
  12.         dtg.Page.EnableViewState = false;  
  13.   
  14.         System.IO.StringWriter tw = new System.IO.StringWriter();  
  15.   
  16.         System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);  
  17.   
  18.         dtg.RenderControl(hw);  
  19.   
  20.         HttpContext.Current.Response.Write(tw.ToString());  
  21.   
  22.         HttpContext.Current.Response.End();  
  23.   
  24.  }  
  25.       
Note:
Khi gặp báo lỗi

Control '...' of type 'GridView' must be placed inside a form tag with runat=server

thì ở webpage nhớ override lại hàm VerifyRenderingInServerForm là ok.
  1. public override void VerifyRenderingInServerForm(Control control)  
  2. {  
  3.   
  4.   // không làm gì cả  
  5.   
  6. }   
  7.       

Chủ Nhật, 10 tháng 6, 2012

Sự khác nhau giữa Union và Union all trong SQL

^^! Lâu lâu không sử dụng nên note lại cho nhớ:
Union và Union all được sử dụng khi muốn trả về 1 tập hợp bằng việc gom chung lại 2 tập hợp cùng cấu trúc trong sql.
Điểm khác biệt giữa 2 từ khóa là:
- Sử dụng Union sẽ loại bỏ bớt các dòng trùng nhau trước khi trả về kết quả. Số lượng dòng của tập kết quả luôn luôn <= (nhỏ hơn hoặc bằng) tổng số dòng của 2 tập đem gom lại.
- Sử dụng Union all sẽ lấy hết tất cả các dòng của 2 tập hợp đem gom lại. Số lượng dòng của tập kết quả luôn luôn =  (bằng) tổng số dòng của 2 tập đem gom lại.

Sử dụng Cookie bằng javascript

Hôm nay mình làm chức năng đăng nhập bằng javascript, cần sử dụng cookie để lưu trữ thông tin đăng nhập cho phần nhớ mật khẩu. Đây là đoạn code javascript để sử dụng cookie mình tham khảo trên w3schools:
  1. function getCookie(c_name) {  
  2.   
  3.     var i, x, y, ARRcookies = document.cookie.split(";");  
  4.   
  5.     for (i = 0; i < ARRcookies.length; i++) {  
  6.   
  7.         x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));  
  8.   
  9.         y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);  
  10.   
  11.         x = x.replace(/^\s+|\s+$/g, "");  
  12.   
  13.         if (x == c_name) {  
  14.   
  15.             return unescape(y);  
  16.   
  17.         }  
  18.   
  19.     }  
  20.   
  21. }  
  22.   
  23. function setCookie(c_name, value, exdays) {  
  24.   
  25.     var exdate = new Date();  
  26.   
  27.     exdate.setDate(exdate.getDate() + exdays);  
  28.   
  29.     var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());  
  30.   
  31.     document.cookie = c_name + "=" + c_value;  
  32.   
  33. }  
  34.       
Xem thêm Sử dụng Cookie trong ASP.NET

Thứ Năm, 15 tháng 3, 2012

Tìm địa chỉ email trong 1 đoạn text sử dụng regex trong C#

 Đoạn code tìm email đơn giản trong một đoạn văn bản bằng cách sử dụng regex:
  1. string containEmails = "abc@abc.com dfjd/->_ff.u@gmail.com";  
  2. List<string> emails = new List<string>();  
  3. MatchCollection mc = Regex.Matches(containEmails, @"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}", RegexOptions.IgnoreCase);  
  4. if (mc.Count > 0)  
  5. {  
  6.          foreach (Match ma in mc)  
  7.          {  
  8.                     string email = ma.Value;  
  9.                     emails.Add(email);  
  10.          }  
  11. }  
  12.       

Thứ Ba, 13 tháng 3, 2012

cập nhập dữ liệu trên view trong Sql Server

Trong trường hợp view được tạo thành từ một bảng duy nhất và các cột của view thuộc danh sách các cột của bảng chính, hay nói cách khác view là một phần nhỏ của bảng chính thì có thể cập nhập trực tiếp dữ liệu trên view, lúc đó dữ liệu trên bảng chính cũng cập nhập theo.
Thao tác cập nhập này tương đương với thao tác cập nhập trên bảng chính nên vẫn phải phụ thuộc vào các ràng buộc trên bảng chính.