Conn = New SqlConnection(strConn)
 Conn.Open() ' báo lỗi ở ngay dòng lệnh này
 End Sub
 End Module
 
 nhưng khi chạy, chương trình báo lỗi không mở được kết nối? Xin hỏi tên Server có chọn "local" được không vì cơ sở dữ liệu lưu ngay tại máy viết code?


 

" />
  • Thứ Hai, 21/01/2008 13:29 (GMT+7)

    Tham số kết nối CSDL

    Câu hỏi :

    Tôi có đoạn lệnh kết nối cơ sở dữ liệu SQL Server 2000 bãng ngôn ngữ VB.Net như sau:
     Imports System.Data
     Imports System.Data.SqlClient
     
     Module Ketnoi_
     Public Conn As SqlConnection
     
     Public Sub KetNoi()
     Dim strConn As String = "Server=(local);database=QL_Sach;integrated Security=false;User ID=sa;pwd="
     Conn = New SqlConnection(strConn)
     Conn.Open() ' báo lỗi ở ngay dòng lệnh này
     End Sub
     End Module
     
     nhưng khi chạy, chương trình báo lỗi không mở được kết nối? Xin hỏi tên Server có chọn "local" được không vì cơ sở dữ liệu lưu ngay tại máy viết code?


     



    Trả lời :
     Trong môi trường .Net, các đối tượng có tên với tiếp đầu ngữ là "Sql" trong thư viện SqlClient là các đối tượng dành riêng để ứng dụng truy xuất database được quản lý bởi SQL Server của Microsoft. Thí dụ đoạn code VB .Net của bạn dùng đối tượng SqlConnection để nối kết với database trên SQL Server. ConnectionString được dùng với đối tượng SqlConnection gồm một số tham số miêu tả database cần truy xuất, thí dụ chuỗi ConnectString của bạn gồm các tham số sau:

     - "Server=" miêu tả địa chỉ server SQL cần truy xuất. Nội dung của tham số này có dạng <tên máy>\<tên server>, trong đó <tên máy> miêu tả tên gợi nhớ hay địa chỉ IP của máy chạy server SQL, còn <tên server> là tên cục bộ của database server mà bạn cần truy xuất. Thí dụ máy của tôi có tên gợi nhớ là HIEPCOMP, tên database server của tôi là HIEPDB thì tham số "Server" sẽ được viết :

     "Server=HIEPCOMP\HIEPDB"
     Nếu dùng địa chỉ IP để nhận dạng máy server, bạn phải đảm bảo SQL Server cần truy xuất đã hỗ trợ protocol (giao thức) TCP/IP trong giao tiếp với các máy client. Bạn hãy tự mình (hay nhờ người quản lý SQL Server) chạy tiện ích quản lý cấu hình SQL Server (trên SQL Server 2005, tiện ích này có tên là "SQL Server Configuration Manager") để kiểm tra lại xem nó có hỗ trợ giao thức TCP/IP chưa, nếu chưa thì phải thiết lập lại cho server hỗ trợ giao thức này. Lưu ý, SQL Server có thể hỗ trợ đồng thời các giao thức Shared Memory, Named Pipes, TCP/IP, VIA...

     - "Database=" miêu tả tên database mà bạn cần truy xuất.
     - "User ID=" miêu tả tên account người dùng được phép truy xuất database.
     - "PWD=" miêu tả password của account người dùng để truy xuất database.
     - "Integrated Security=" miêu tả có dùng chế độ an toàn dữ liệu được tích hợp bởi Windows không, thường nếu chỉ muốn dùng chế độ bảo vệ riêng của SQL Server, nội dung của tham số này sẽ là "False".

     Người quản trị SQL Server (administrator) sẽ quản lý các account được phép truy xuất, mỗi account được nhận dạng bởi username/password gì, có quyền truy xuất nào trên các database nào... Chương trình muốn truy xuất database nào đó trên SQL Server, người lập trình (hay người dùng) phải biết các thông tin truy xuất gồm địa chỉ SQL Server (có dạng <tên máy>\<tên server>), tên database cần truy xuất, tên username, password được phép truy xuất database đó.

     Chỉ cần giá trị của 1 tham số trong chuỗi ConnectionString bị sai thì việc tạo Connection đến database sẽ bị thất bại và máy sẽ báo lỗi. Theo kinh nghiệm của chúng tôi, lỗi sai mà người lập trình thường mắc phải là khai báo sai tên của SQL Server, thí dụ bạn viết "Server=(local)" thường bị báo sai, bạn phải viết là "Server=(local)\<instanceName>", trong đó <instanceName> là tên của SQL Server chạy trên máy bạn.
    Chuyên mục: Cơ sở dữ liệu