我机子系统是win2003,装有sql2000和sql2005,之前有用过获取局域网中sql服务器的方法,发现只能获取本机第一个服务器名即先安装的sql2000的服务器名(例如(local)),后面安装的sql2005的服务器名(例如local\sql2005)获取不到,哪位高手可以帮忙,我只想要找到本机的多个服务器名,不要局域网的,分数多多哦!

解决方案 »

  1.   

    请教楼主如何取得本机第一个服务器名即先安装的sql2000的服务器名(例如(local))? 谢谢!
      

  2.   

    kill bugs 在上文提到:
    请教楼主如何取得本机第一个服务器名即先安装的sql2000的服务器名(例如(local))? 谢谢!http://www.ahaoz.com/Article/203/209/441/2005/2005111590473.html 
    这是我上次提问时别人给我的代码地址,我试过,在局域网里可以获取自己和其他电脑的sql服务器名(不论是sql2000的还是sql2005的),不过只能获取第一个,而且如果局域网做了某些限制的话可能出现“没有设置对象的实例”的错误。
      

  3.   

    你可以试试看这个(我自己没有两个本地实例):
    using System;
    using System.Windows.Forms;
    using System.Data;
    using Microsoft.SqlServer.Management.Smo;   //要添加Microsoft.SqlServer.Smo引用namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                //InitializeComponent();            bool localOnly = true;
                DataTable table = SmoApplication.EnumAvailableSqlServers(localOnly);     //<----
                foreach (DataRow row in table.Rows)
                {
                    string s = "";
                    foreach (DataColumn c in table.Columns)
                    {
                        s += c.Caption + ": " + row[c] + "\n";
                    }
                    MessageBox.Show(s);
                }
            }
        }
    }
      

  4.   

    谢谢gomoku !!!成功!我稍微改造一下,用一个下拉框接收,因为我只取name就好了。另外也说明一下Microsoft.SqlServer.Management.Smo的导入:引用—添加引用—选择.NET下的Microsoft.SqlServer.Smousing System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.SqlServer.Management.Smo; namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)
            {
                bool localOnly = true;
                DataTable table = SmoApplication.EnumAvailableSqlServers(localOnly);  
                //foreach (DataRow row in table.Rows)
                //{
                //    string s = "";
                //    foreach (DataColumn c in table.Columns)
                //    {
                //        s += c.Caption + ": " + row[c] + "\n";
                //    }
                //    MessageBox.Show(s);
                //}
                this.cboServers.DataSource = table;
                this.cboServers.DisplayMember = "name";        }
        }
    }