Thứ Năm, 20 tháng 12, 2012

Tìm danh sách các Store Procedure,View có liên quan đến Table nào đó trong MS SQL Server

Hôm nay mình cấu trúc lại database nên cần chỉnh sửa 1 số tên cột, xóa 1 số bảng không còn dùng nữa ra khỏi database.

Một điều khá mệt là hệ thống mình kết nối dữ liệu tới database đều sử dụng Store Proc hết, số lượng store proc rất nhiều. Khi sửa tên cột trong table, các store proc nào có gọi đến tên cột của table nó không tự động đổi cho nên khi gọi store proc này sẽ báo lỗi. Thêm 1 điều nữa là khi quyết định xóa 1 table mình phải chắc chắn không có store proc hay view nào đang dùng tới nó.

Sử dụng đoạn lệnh sau để tìm các store proc, view có sử dụng table muốn sửa hay muốn xóa:
  1. use [Database Name]  
  2. SELECT DISTINCT o.name, o.xtype  
  3. FROM syscomments c  
  4. INNER JOIN sysobjects o ON c.id=o.id  
  5. WHERE c.TEXT LIKE '%tableName%'      
Hoặc
SELECT o.name, o.xtype, m.definition
FROM sys.sql_modules  m  
INNER JOIN sysobjects o ON m.object_id = o.id 
WHERE m.definition LIKE '%tableName%' 
Cách làm này có thể không chính xác tuyệt đối (tìm trong nội dung có chứa tên của table) nhưng cũng khá hiệu quả.

Thứ Hai, 10 tháng 12, 2012

Xóa các thẻ Html ra khỏi 1 chuỗi (lấy InnerText của 1 thẻ Html)

Khi có 1 object HtmlElement (System.Windows.Forms) hay HtmlNode (HtmlAgilityPack) thì việc lấy InnerText của nó khá đơn giản, chỉ cần .InnerText là ra.

Trường hợp có 1 thẻ Html nhưng ở dạng chuỗi thì sử dụng regular expression để replace những đoạn có cấu trúc là 1 tag mở hay tag đóng của 1 thẻ Html.

Có rất nhiều mẫu để tìm tag html ví dụ "<[^>]*>" hoặc "<.*?>" . Trường hợp này mình dùng mẫu  "<[^>]*>":
  1. public static string RemoveHtml(this string text)  
  2. {  
  3.     return Regex.Replace(text, "<[^>]*>"string.Empty);  
  4. }  
Test:
  1. string link = "<a href=\"http://www.hanhtranglaptrinh.com/2012/11/goi-ham-javascript-bang-webbrowser.html\">Gọi hàm Javascript bằng webbrowser control C#</a>";  
  2. string anchorText = link.RemoveHtml();//Gọi hàm Javascript bằng webbrowser control C#