PDA

View Full Version : cần giúp về vb.net



changcodon777
14-07-2009, 13:21
mình đang cần đoạn code viết '
với giá trị truyền vào là tên sever trong máy, thì cân liệt kê ra tất cả các csdl của sever đó

đang làm phân tán mà cái này bó tay

anh em giúp đở với
thank

[=========> Bổ sung bài viết <=========]

sao không ai giúp tui vậy trời

VNFoxCom
16-07-2009, 00:53
Làm ơn cho biết cần giúp phần nào ... và những code đã có rồi hãy post lên ... tôi tham khảo và mới có thể giúp được ... nói như vậy tôi cũng bó tay :)

buratino0312
16-07-2009, 09:12
Bạn dùng SQLDMO ấy, nó sẽ làm hết cho bạn. từ server đến database...

dq_ninh
16-07-2009, 10:59
mình đang cần đoạn code viết '
với giá trị truyền vào là tên sever trong máy, thì cân liệt kê ra tất cả các csdl của sever đó

đang làm phân tán mà cái này bó tay

anh em giúp đở với
thank

[=========> Bổ sung bài viết <=========]

sao không ai giúp tui vậy trời

Có một điều bạn cần nên nhớ là khi bạn hỏi một vấn đề gì, bạn bạn đưa lên ít nhất là một vài dữ liệu cần thiết, thì các bạn khác mới có thể dễ dàng trả lời. Ít nhất bạn phải cho biết bạn dùng SQL version nào: 2000, 2005, hay 2008. Vì nhiều khi, cách giải quyết vấn đề thay đổi ít nhiều tùy theo version.

Một vấn đề cần chú ý ở đây là, khi bạn đã có Server rồi, nhưng chưa có tên của database, điều này có nghĩa là user chưa có đăng nhập vào CSDL. Lúc này, bạn không biết đây có phải là một ...valid user hay không, cho nên cái chuyện lấy mộtd list của CSDL đòi hỏi bạn phải cung ứng một login name và một password khác để log vào master database. Để lấy một danh sách những CSDL sau khi đã có tên của Server, bạn cần làm những điều như sau:

1. Có một login nam/password riêng, không phải của người sử dụng.
2. dùng login name/password đó để kết nối với master database.
3. Sau khi kết nối thành công thì dùng query để truy vấn:SQL 2000: sysdatabases table. SQL-2005 hay 2008 thì truy vấn từ sys.databases view
như sau:

SELECT name FROM sys.databases

Dĩ nhiên, bạn nên lọc ra những system databases như master,tempdb, model, msdb.

Nhưng tóm tắt lại, đưa lên một danh sách của những CSDL cho một người sử dụng xem mà không biết người này có phải là một valid user hay không, hoặc không biết người sử dụng có được quyền (access rights) cho một hay nhiều CSDL trong danh sách hay không, là một điều nên tránh.

changcodon777
20-07-2009, 16:39
mình dùng sql 2000,hiên tại trong máy mình đang có hai sever ,mổi sever có ba csdl do mình tạo ra,giả sử mình có sever1 va sevr2 ,
bây giờ mình muốn sau khi dang nhập vào ,thì có một combox liệt kê ra những sever (sever1 av2 server2) khi mình click chọn sever nào thì có một listbox liệt ke ra ten csdl đó ,

nếu bạn nào code (vb)thì cho mình xin.
mình nói thật mình học môn này hơi tệ nên củng không giỏi lám.

cám ơn các bạn đã có lời bình về đế tài này.

dq_ninh
20-07-2009, 22:18
Muốn lấy một danh sách của servers, bạn cần phải dùng SMO. Cần phải phân biệt giữa các Servers và những ínstances của một server, vì cách truy vấn chúng khác nhau.

dưới đây là sample code, trên http://www.sqldbatips.com/showarticle.asp?ID=45

Lấy danh sách của server


Imports Microsoft.SqlServer.Management.Smo
Imports System.Data

Module SMOTest

Sub Main()
Dim dt As DataTable = SmoApplication.EnumAvailableSqlServers(False)
If dt.Rows.Count > 0 Then
For Each dr As DataRow in dt.Rows
Console.WriteLine(dr("Name"))
Next
End If
End Sub

End Module


Lấy danh sách những instances


Imports Microsoft.Win32

Module SMOTest

Sub Main()
Dim rk As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Microsoft SQL Server")
Dim instances As String() = CType(rk.GetValue("InstalledInstances"),String())
If (instances.Length > 0) Then
For Each element As String in instances
If element = "MSSQLSERVER" Then
Console.WriteLine(System.Environment.MachineName)
Else
Console.WriteLine(System.Environment.MachineName + "\" + element)
End If
Next
End If
End Sub

End Module

changcodon777
03-08-2009, 19:05
thank bạn nhiều.minh se thử và báo kết quả cho bạn liền