返回首页

在局域网中的SQL实例名单: 我已经连接局域网中的5个节点m / C。我运行低于code.There以下,是三个M / C输出数组列表中显示,不显示其他两个M / C。但是,安装快速治疗是安装在每个M / C Windows防火墙是在每个M / C
是什么问题?
请帮我......

我的代码如下:-GT;

using System;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

 

namespace SQLInstLAN

{

    public class SqlLocator

    {

        [DllImport("odbc32.dll")]

        private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);

        [DllImport("odbc32.dll")]

        private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);

        [DllImport("odbc32.dll")]

        private static extern short SQLFreeHandle(short hType, IntPtr handle);

        [DllImport("odbc32.dll", CharSet = CharSet.Ansi)]

        private static extern short SQLBrowseConnect(IntPtr hconn, StringBuilder inString,

              short inStringLength, StringBuilder outString, short outStringLength,

              out short outLengthNeeded);

 

        private const short SQL_HANDLE_ENV = 1;

        private const short SQL_HANDLE_DBC = 2;

        private const int SQL_ATTR_ODBC_VERSION = 200;

        private const int SQL_OV_ODBC3 = 3;

        private const short SQL_SUCCESS = 0;

 

        private const short SQL_NEED_DATA = 99;

        private const short DEFAULT_RESULT_SIZE = 1024;

        private const string SQL_DRIVER_STR = "DRIVER=SQL SERVER";

 

        //private SqlLocator() { }



        public string[] GetServers()

        {

            string[] retval = null;

            string txt = string.Empty;

            IntPtr henv = IntPtr.Zero;

            IntPtr hconn = IntPtr.Zero;

            StringBuilder inString = new StringBuilder(SQL_DRIVER_STR);

            StringBuilder outString = new StringBuilder(DEFAULT_RESULT_SIZE);

            short inStringLength = (short)inString.Length;

            short lenNeeded = 0;

 

            try

            {

                if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))

                {

                    if (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, 0))

                    {

                        if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))

                        {

                            if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString,

                                  DEFAULT_RESULT_SIZE, out lenNeeded))

                            {

                                if (DEFAULT_RESULT_SIZE < lenNeeded)

                                {

                                    outString.Capacity = lenNeeded;

                                    if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString,

                                          lenNeeded, out lenNeeded))

                                    {

                                        throw new ApplicationException("Unabled to aquire SQL Servers from ODBC driver.");

                                    }

                                }

                                txt = outString.ToString();

                                int start = txt.IndexOf("{") + 1;

                                int len = txt.IndexOf("}") - start;

                                if ((start > 0) && (len > 0))

                                {

                                    txt = txt.Substring(start, len);

                                }

                                else

                                {

                                    txt = string.Empty;

                                }

                            }

                        }

                    }

                }

            }

            catch (Exception ex)

            {

                //Throw away any error if we are not in debug mode

                MessageBox.Show(ex.Message, "Acquire SQL Server List Error");

                txt = string.Empty;

            }

            finally

            {

                if (hconn != IntPtr.Zero)

                {

                    SQLFreeHandle(SQL_HANDLE_DBC, hconn);

                }

                if (henv != IntPtr.Zero)

                {

                    SQLFreeHandle(SQL_HANDLE_ENV, hconn);

                }

            }

 

            if (txt.Length > 0)

            {

                retval = txt.Split(",".ToCharArray());

            }

 

            return retval;

        }

    }

}
:7678194 |会员

回答