• Thứ Bảy, 20/11/2010 07:59 (GMT+7)

    Lập trình ASP truy xuất CSDL SQL

    Câu hỏi :

    Xin chỉ giúp cho code ASP lấy dữ liệu từ csdl SQL.



    Trả lời :

    Trong trang ASP bạn có thể dùng các đối tượng ADO như Connection, Recordset,... để truy xuất dữ liệu trong database SQL (hay của database server bất kỳ). Thí dụ file DataDisp.asp sau đây sẽ truy xuất và hiển thị các record dữ liệu của bảng dữ liệu tên là "danhbadienthoai" (gồm 3 field tenthuebao, sodienthoai, diachi) nằm trong database "mydatabase" được quản lý bởi SQL Server chạy ở địa chỉ "HIEPCOMP\SQLEXPRESS". Tên và password của account được phép truy xuất database này là "sa" và "luonghoa":

    <%@ Language="VBScript" CodePage="65001"%>
    <HTML>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <HEAD>
    <%
    Sub DataDisp()
    'khai báo các biến cần dùng
    'Dim Connection1 As ADODB.Connection
    'Dim rs As ADODB.Recordset
    'Dim MyConString As String
    'thiết lập chuỗi ConnectionString chứa các tham số về database
    MyConString = "Provider=SQLOLEDB; Persist Security Info=False; SERVER=HIEPCOMP\SQLEXPRESS; UID=sa; PWD=luonghoa; Initial Catalog=mydatabase; Port=1433"
    'Tạo connection tới database
    Set Connection1 = Server.CreateObject("ADODB.Connection")
    Connection1.Open MyConString
    'tạo 1 đối tượng Recordset
    Set rs = Server.CreateObject("ADODB.Recordset")
    With rs
    Set .ActiveConnection = Connection1
    'thiết lập lệnh truy vấn động theo yêu cầu
    .Source = "SELECT * FROM danhbadienthoai"
    .Open
    End With
    'hiển thị kết quả lên các textbox tương ứng
    i = 1
    If Not rs.EOF Then
    'tao table va xuat hang dau tien
    Response.Write "<table border=1 cellPading=1 cellSpacing=1>" & vbCrlf
    Response.Write "<tr><th>Số thứ tự</th><th>Tên thuê bao</th><th>Số điện thoại</th><th>Điạ chỉ</th></tr>" & vbCrlf
    while Not rs.EOF
    stentbao = rs.Fields("tenthuebao")
    ssodthoai = rs.Fields("sodienthoai")
    sdiachi = rs.Fields("diachi")
    Response.Write "<tr><td>" & i & "</td><td>" & stentbao & "</td><td>" & ssodthoai & "</td><td>" & sdiachi & "</td><tr>" & vbCrlf
    i = i+1
    rs.MoveNext
    wend
    Response.Write "</table><p></p>" & vbCrlf
    Else
    Response.Write "<p>Không có record nào trong bảng dữ liệu của bạn cả!!<br>" & vbCrlf
    End If
    'đóng các đối tượng đã dùng
    rs.Close
    Connection1.Close
    Set rs = Nothing
    Set Connection1 = Nothing
    End Sub
    %>
    </HEAD>
    <BODY>
    Nội dung hiện hành của bảng danhbadienthoai là :
    <% DataDisp %>
    </BODY>
    </HTML>

    Còn nếu lập trình bằng ASP .Net, bạn có thể dùng các đối tượng sqlConnection, sqlCommand, sqlDataReader,... trong Package System.Data.SqlClient. Sau đây là qui trình điển hình để xây dựng trang ASP .Net có chức năng tương tự như trang DataDisp.asp trên đây:

    1. Chạy tiện ích quản lý database SQL Server (SQL Server Management Studio Express), 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). Cố gắng thêm 1 số record dữ liệu chứa nội dung thử nghiệm vào bảng danhbadienthoai.

    2. chạy Microsoft Visual Studio 200x. Chọn menu File.New Website để hiển thị cửa sổ "New Web site", chọn template "ASP .Net Website", chọn/nhập đường dẫn thư mục chứa Project Website, chọn ngôn ngữ lập trình là VB .Net rồi click button OK để tạo Project mới.

    3. Khi trang ASP .Net mặc định có tên là Default.aspx hiển thị (hoàn toàn trống), bạn hãy vẽ 1 button, đặt tên cho button này là btnDisp.

    4. Ấn kép chuột vào button btnDisp để tạo thủ tục xử lý Click chuột trên button này rồi viết code truy xuất từ bảng dữ liệu và hiển thị lên trang web:

    'thêm lệnh Imports sau vào đầu file để sử dụng các đối tượng SqlClient
    Imports System.Data.SqlClient

    Partial Class _Default
    Inherits System.Web.UI.Page
    //thủ tục xử lý chuột trên button
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    'định nghĩa các biến cần dùng
    Dim myConnection As SqlConnection
    Dim MyConString As String
    'thiết lập chuỗi ConnectionString chứa các tham số về database
    MyConString = "server=HIEPCOMP\SQLEXPRESS;user id=sa; pwd=luonghoa; database=mydatabase;"
    'Tạo connection tới database
    myConnection = New SqlConnection(MyConString)
    myConnection.Open()
    'tạo 1 đối tượng Command thực hiện lệnh truy vấn
    Dim myCommand As New SqlCommand("SELECT * FROM danhbadienthoai", myConnection)
    Dim myReader As SqlDataReader
    myReader = myCommand.ExecuteReader()
    'hiển thị kết quả lên trang Web hiện hành
    If myReader.Read() Then
    'nếu có dữ liệu thì hiển thị dạng bảng
    Dim nItem As Integer = 1
    Dim tentbao As String
    Dim sodthoai As String
    Dim diachi As String
    'xuất tag miêu tả bảng và hàng header của bảng
    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 dữ liệu đầ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 xuất các record dữ liệuc còn lại
    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 tag kết thúc bảng
    Response.Write("</table>" & vbCrLf)
    Else
    'nếu không có dữ liệu thì báo lỗi
    Response.Write("<P>Bảng dữ liệu chưa có nội dung!</P>")
    End If
    'đóng các đối tượng đã dùng lại
    myReader.Close()
    myConnection.Close()
    End Sub
    End Class

    5. Chọn menu Debug.Start Debugging để chạy thử trang ASP .Net vừa xây dựng. Khi trang web hiển thị, hãy nhấn chuột vào button để trang web truy xuất database và hiển thị kết quả truy xuất được.

    Tôi là kỹ sư chuyên ngành cơ điện, thực hiện đề tài "Mô phỏng Bàn điều khiển thiết bị tua bin khí" trên bàn điều khiển có đồng hồ đo các thông số của thiết bị Tua bin khí (kiểu như động cơ máy bay). Đồng hồ này gồm có 3 kim để đo 3 thông số khác nhau, tôi sử dụng 1 Form với thuộc tính BackgroundImage là mặt đồng hồ, Panel 1 cũng có BackgroundImage là kim đồng hồ thứ nhất, PictureBox là kim đồng hồ thứ 2 thì không vấn đề gì nhưng còn kim thứ 3 thì nếu sử dụng tiếp Panel 2 thì khi nạp lên đồng hồ cứ nháy liên tục trông rất xấu, còn sử dụng PictureBox thứ 2 thì PictureBox thứ nhất không nhìn thấy gì mà chỉ thấy Panel 1.