能否给段代码?

解决方案 »

  1.   

    --try--得到局域网内sqlserver的数据库及实例名
                                   public string[] GetServers()
      {
          string[] serverNames = null;
          SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
          System.Data.DataTable table = instance.GetDataSources();
          if (table.Rows.Count <= 0)
              return null;
          serverNames = new string[table.Rows.Count];
          int i = 0;
          foreach (System.Data.DataRow row in table.Rows)
          {
              if (row["InstanceName"].ToString().Length > 0)
                  serverNames[i] = row["ServerName"].ToString() + "\\" + row["InstanceName"].ToString();
              else
                  serverNames[i] = row["ServerName"].ToString();          i++;
          }
          return serverNames;
      }
      

  2.   

    --转:
    使用SQLDMO和T-SQL列出所有的实例--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
    --原帖地址
    微软报告的Bug:
    SQLDMO.Application对象的方法ListAvailableServers会引起0x800A000E错误。
    当从ASP页面执行SQLDMO.Application对象的方法ListAvailableServers,也许会发生下面的错误消息:Microsoft SQL-DMO (0x800A000E) 
    [SQL-DMO]Not enough storage is available to complete this operation. 然而,有一些方法可以解决这个问题以得到实例即在ASP上使用客户端脚本。这里有一个存储过程,我们将准备列出所有可用的实例,所以在你的Web应用程序里很容易展示它们。CREATE PROCEDURE EnumerateSQLServers
    AS
    /*
    存储过程名称: EnumerateSQLServers
    作者            : Srdjan Josipovic
    日期            : 2002-06-19
    目的            :使用SQLDMO和TSQL列出所有可用的实例
    翻译整理      :王成辉*/DECLARE @retval int
    DECLARE @result varchar(500)
    DECLARE @object int 
    DECLARE @objectList int 
    DECLARE @src varchar(254)
    DECLARE @desc varchar(255)
    DECLARE @resultsCount int
    DECLARE @counter int
    DECLARE @method varchar(255)--创建SQLDMO对象
    EXEC @retval = sp_OACreate 'SQLDMO.Application', @object OUT--检查对象是否创建成功
    IF @retval <> 0 
    BEGIN
        EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
        SELECT hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
        RETURN
    END
    --调用方法ListAvailableServers() , 为SQLDMO.NameList得到Object_ID
    EXEC @retval = sp_OAMethod @object , 'ListAvailableSQlServers()' , @objectList OUT
    -- 是否有错误?
    IF @retval <> 0 
    BEGIN
        EXEC sp_OAGetErrorInfo @objectList, @src OUT, @desc OUT 
        SELECT hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
        RETURN
    END
    --计算局域网里的服务器数量
    EXEC @retval = sp_OAGetProperty @objectList , 'Count' , @resultsCount OUT
    --再一次进行错误处理
    IF @retval <> 0 
    BEGIN
        EXEC sp_OAGetErrorInfo @objectList, @src OUT, @desc OUT 
        SELECT hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
        RETURN
    END--如果有服务器的话,进入处理.....
    IF @resultsCount > 0
    BEGIN
      SET @counter = 1
      DECLARE @ServersTbl table (ServerID int IDENTITY ,ServerName varchar(255))
      WHILE @counter <= @resultsCount
      BEGIN
        --列出SQL实例:一个名字接一个名字的列出
        SET @method = 'Item(' + convert(varchar(3),@counter) + ')'        
        EXEC @retval = sp_OAGetProperty @objectList ,@method , @result OUT
        
        --将数据存到临时表
        INSERT INTO @ServersTbl (ServerName) SELECT @result
        
        --移到下一条记录
        SET @counter = @counter + 1
      END
    END
    ELSE
    BEGIN
      SET @result = 'No Servers around you'
      INSERT INTO @ServersTbl (ServerName) SELECT @result
    END
    --释放对象
    EXEC @retval = sp_OADestroy @object
    IF @retval <> 0
    BEGIN
      EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
      SELECT hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
      RETURN
    END--好了,可以列出所有可用的实例了 ....
    SELECT * FROM @ServersTbl
    GO
      

  3.   

    thank you!it's all down.