• Thứ Hai, 17/08/2009 10:07 (GMT+7)

    Lưu và truy suất dữ liệu tiếng Việt trong ASP.NET như thế nào?

    Câu hỏi :
    1. Lập trình web trên nền ASP .NET dùng cơ sở dữ liệu SQL Server, khi nhập dữ liệu tiếng Việt có dấu vào cơ sở dữ liệu thì bị mã hóa. Xin hướng dẫn cách load dữ liệu lên trang web hiển thị đúng tiếng Việt có dấu.
     
     2. Xin cho một ví dụ dùng ASP .Net kết nối database SQL Server 2005 Express để lấy data viết bằng VB .Net mà không sử dụng đối tượng Datagrid hay Dataset, đơn thuần lấy dữ liệu và in ra. 
     

    Trả lời :
    Để truy xuất database được quản lý bằng SQL Server (bất kỳ version nào) trong trang ASP .Net, bạn có thể dùng các đối tượng SQL trong Package System.Data.SqlClient. Các đối tượng này có tên là sqlConnection, sqlCommand, sqlDataReader,...

     Sau đây là qui trình điển hình để xây dựng trang ASP .Net tra danh bạ điện thoại:
     1. Bạn chạy tiện ích quản lý database SQL Server, tạo mới database có tên là mydatabase, trong database này bạn tạo 1 bảng dữ liệu có tên là danhbadienthoai, mỗi record gồm 3 field thông tin: tenthuebao, sodienthoai, diachi đều thuộc kiểu dữ liệu ntext (chuỗi Unicode). Thử thêm một số record dữ liệu chứa nội dung chuỗi tiếngViệt Unicode theo nhu cầu vào bảng danhbadienthoai.
     2. Chạy Microsoft Visual Studio 200x, chọn chức năng Create.Web site để tạo 1 Project quản lý website mới. Khi cửa sổ New Web Site hiển thị, bạn chọn icon ASP .Net Website, nhập vào đường dẫn chứa Website, chọn ngôn ngữ lập trình là VB .Net.
     3. Khi trang ASP mặc định có tên là Default.aspx hiển thị (hoàn toàn trống), bạn hãy thiết kế nội dung trang web như hình:
     Hãy đặt tên cho 3 textbox lần lượt là txtTenthuebao, txtSodthoai, txtDiachi, tên cho button là btnSearch.
     4. Ấn kép chuột vào button "Bắt đầu tra" để tạo thủ tục xử lý Click chuột trên button này rồi viết đoạn code VB .Net tra danh bạ điện thoại trên database do SQL Server Express quản lý:
     'thêm lệnh Imports sau vào đầu file để sử dụng các đối tượng SqlClient
     Imports System.Data.SqlClient
     
     'thủ tục xử lý Click chuột trên button
     Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
     'khai báo các biến cần dùng
     Dim fsqlstart As Integer
     Dim tentbao As String
     Dim sodthoai As String
     Dim diachi As String
     Dim newSQL As String
     fsqlstart = 1
     'xác định các chuỗi thông tin nhập
     tentbao = Request.Form("txtTenthuebao")
     sodthoai = Request.Form("txtSodthoai")
     diachi = Request.Form("txtDiachi")
     'xây dựng lệnh SQL tìm các thuê bao
     newSQL = "SELECT * FROM danhbadienthoai"
     If tentbao <> "" Then
     newSQL = newSQL + " where tenthuebao like N'%" + tentbao + "%'"
     fsqlstart = 0
     End If
     If sodthoai <> "" Then
     If fsqlstart = 1 Then
     newSQL = newSQL + " where sodienthoai like N'%" + sodthoai + "%'"
     Else
     newSQL = newSQL + " and sodtienhoai like N'%" + sodthoai + "%'"
     End If
     fsqlstart = 0
     End If
     If diachi <> "" Then
     If fsqlstart = 1 Then
     newSQL = newSQL + " where diachi like N'%" + diachi + "%'"
     Else
     newSQL = newSQL + " and diachi like N'%" + diachi + "%'"
     End If
     fsqlstart = 0
     End If
     'tạo cầu nối tới database cần truy xuất
     Dim myConnection As New SqlConnection("server=HIEPCOMP\SQLEXPRESS;user id=sa; pwd=luonghoa; database=mydatabase;")
     myConnection.Open()
     'tạo đối tượng Command thực hiện truy vấn
     Dim myCommand As New SqlCommand(newSQL, myConnection)
     Dim myReader As SqlDataReader
     myReader = myCommand.ExecuteReader()
     Response.Write("<h2>Kết quả tra danh bạ điện thoại của bạn :</h2>")
     'kiểm tra xem có tìm được thuê bao
     If myReader.Read() Then
     'nếu có thì tạo bảng hiển thị
     Dim nItem As Integer = 1
     Response.Write("<table border=1>" & vbCrLf)
     Response.Write("<tr><th>Số thứ tự</th><th>Tên thuê bao</th><th>Số điện thoại</th><th>Địa chỉ</th></tr>" & vbCrLf)
     tentbao = myReader.GetString(0)
     sodthoai = myReader.GetString(1)
     diachi = myReader.GetString(2)
     'xuất hàng thông tin về thuê bao đầu tiên
     Response.Write("<tr><td>" & nItem & "</td><td>" & tentbao & "</td><td>" & sodthoai & "</td><td>" & diachi & "</td></tr>" & vbCrLf)
     nItem = nItem + 1
     'lặp đọc từng record còn lại và hiển thị
     While myReader.Read()
     tentbao = myReader.GetString(0)
     sodthoai = myReader.GetString(1)
     diachi = myReader.GetString(2)
     Response.Write("<tr><td>" & nItem & "</td><td>" & tentbao & "</td><td>" & sodthoai & "</td><td>" & diachi & "</td></tr>" & vbCrLf)
     nItem = nItem + 1
     End While
     'xuất lệnh kết thúc bảng
     Response.Write("</table>" & vbCrLf)
     Else
     'nếu không có thì báo lỗi
     Response.Write("<P>Không tìm được thuê bao thỏa yêu cầu của bạn!</P>")
     End If
     'đóng các đối tượng đã dùng
     myReader.Close()
     myConnection.Close()
     End Sub

     5. Chạy thử trang ASP .Net, nhập thử một số thông tin mà bạn cần tìm vào các textbox tương ứng (thí dụ muốn tìm các thuê bao có tên chứa chuỗi "Nguyễn", bạn nhập chuỗi "Nguyễn" vào textbox TxtTenthuebao) rồi click button "Bắt đầu tra". Thủ tục xử lý btnSearch_Click sẽ chạy, nó sẽ truy xuất database, tìm các thuê bao thỏa mãn điều kiện tìm kiếm của bạn và hiển thị bảng kết quả lên trang ASP .Net của bạn.

     Lưu ý, để SQL Server xử lý đúng chuỗi Unicode trong các lệnh truy vấn SQL, bạn nên dùng cú pháp N'chuỗi' để miêu tả chuỗi Unicode.
     
    Chuyên mục: Lập trình