Cái này hồi đó mình có làm rồi, và không dùng
(vì không biết)Code:SmoApplication.EnumAvailableSqlServers()
Mình xài cái này đơn giản vả dễ hiểu hơn nhiều
Code:select * from sysdatabases where dbid > 4
Vân tôi đang làm một demo về connect, backup, restore, nâng cao hơn là load sever name + databases lên combobox nhưng mọi phương pháp đều sụp đổ hoàn toàn(Vì cái nâng cao đó)...
Vì Server name khi load lên là null???
Tôi đã thử dùng datagridview để load lên hết nhưng tất cả các trường vẫn không có gì??
Trong khi dùng SQL Managerment thì có server name đầy đủ???
Tôi nghĩ là không phải là do code mà do vấn đề gì đó???
Ai có thể giúp tôi về vấn đề này??
Code thì rất nhiều nhưng ko thể nào load lên dc toàn là null???
Đây là code load server name lên datagridview
Visual C# Code:
//Thư viện cần thiết { // Create a DataTable where we enumerate the available servers //DataTable dtServers = SmoApplication.EnumAvailableSqlServers(true); //// If there are any servers at all //if (dtServers.Rows.Count > 0) //{ // // Loop through each server in the DataTable // foreach (DataRow drServer in dtServers.Rows) // { // // Add the name to the combobox // cmbServer.Items.Add(drServer["Name"]); // } //} DataTable dt = SmoApplication.EnumAvailableSqlServers(); dataGridView1.DataSource = dt; //cmbServer.DisplayMember = "Name"; //Humk! Code đủ mọi cách mà vẫn vậy???(:-)?? }
Dưới đây là ảnh demo sau khi đã load lên combobox và DatagridView vẫn là null!!
Đã được chỉnh sửa lần cuối bởi cchangkhongayngo : 13-09-2011 lúc 06:02 PM.
Cái này hồi đó mình có làm rồi, và không dùng
(vì không biết)Code:SmoApplication.EnumAvailableSqlServers()
Mình xài cái này đơn giản vả dễ hiểu hơn nhiều
Code:select * from sysdatabases where dbid > 4
p/s: ta là gấu
Mình thường lấy ServerName bằng tên máy tính + với Instance Name của loại SQL đó trong Registry.
Bạn vào Registry tìm đến khóa HKey_Local_Machine\Software\Microsoft\Microsoft SQL Server. Thấy giá trị của Value "InstalledInstances". Trong đó chứa tất cả Instance Name của SQL.(Theo mình là thế).
Hi vọng giúp đc bạn
p/s: ta là gấu
Thanks bạn haiduong87 và các bạn rất nhiều!
Rồi ok! Vậy là mình đã giải quyết xong load alls databases lên hết rồi.
Vấn đề chủ yếu là load tên server lên combobox
Nếu nói như bạn huuhung thì làm sao để lấy value từ khóa đó ra??
Server name hiện tại của mình là FOREVER-TUANPRO\SQLEXPRESS
Có ai có cao kiến nữa ko??
Đã được chỉnh sửa lần cuối bởi cchangkhongayngo : 13-09-2011 lúc 09:04 PM.
Cái này thì không biết gợi ý thế nào, chỉ có góp ý thế này:
- Chỉ khi nào ấn vào connect thì mới nên load các database của server đó lên, làm vậy có vẻ hợp lý hơn.
- Việc load tên server lên combobox là không thể vì cái này là dạng dữ liệu không lưu trữ. Bạn muốn làm việc với database nào thì bạn phải gõ tên database và thông tin đăng nhập vào.
- Nếu vẫn muốn sử dụng combobox để load tên server, thì lúc này thiết kế của phần mềm sẽ thay đổi.
- Nôm na là bạn có một cái master database lưu trữ thông tin của các database server con trong hệ thống.
- Có một bảng trong master database để lưu trữ thông tin các database server (Name, Login Type, Username, Password)
- Đến đây thì chỉ lấy tên các database server đổ vào combobox, cái này thì đơn giản rồi.
Phần góp ý mình chỉ có nhiêu đó. Bạn xem xét lại thử có cần thiết phải làm load tên server vào combobox không rồi tự triển khai nhé. Project bạn đang làm khá là hay đó, tự viết cái tool cho mình xài, nhanh gọn hơn vào studio để thao tác.
Chúc vui vẻ
p/s: ta là gấu
Được hỗ trợ hết rồi
- Trả ra cái DataTable
- Load lên comboboxCode:public DataTable LoadServerName() { return SmoApplication.EnumAvailableSqlServers(); }
Thế là hiện tất cả các Server name và InstanceCode:DataTable dt = this.LoadServerName(); foreach (DataRow row in dt.Rows) { string name = row["Server"].ToString()+"\\"+row["Instance"].ToString(); cbbServerName.Items.Add(name); }
Nothing is Impossible
Từ đầu thì mình cũng dùng như trên nhưng load toàn là rỗng!!
Mình đã điều tra ra nguyên nhân là khi server đang chạy thì load lên toàn là rỗng!!
Mà mình nghĩ đến việc user sử dụng app của mình mà biết tên server name của họ đâu mà nhập!! là mình điên lên
Mọi việc sẽ rất đơn giản khi mình lấy dc value data của InstalledInstances có value là "SQLEXPRESS"
Vậy ai có thể chỉ cho mình cách lấy Value data của nó bằng C#!!!
Các tài liệu về registry ko có phần lấy value data --> chỉ có lấy name của keys thôi
Đã được chỉnh sửa lần cuối bởi cchangkhongayngo : 14-09-2011 lúc 09:55 AM.