网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.C#中的类型相等与恒等(Equality .
.C#应用访问Microsoft SQL Server.
.C#列出局域网中可用SQL Server服.
.c# 正确读取存储中文,以及如何获.
.在C#中使用可空类型.
.一个调查实例<主要训练向panel中.
.C#反射实例讲解.
.用Visual C#来删除注册表中的注.
.将指定网页添加到收藏夹的方法(c.
.c#数据库操作的3种典型用法.
.VC# .Net中使用Crystal Report.
.利用网页强制重启服务器(C#).
.RadioBox、CheckBox和Validating.
.C# Source 与VB Source 的不同.
.c#中分割字符串的几种方法.
.信息反馈-邮件(数据库是XML) .
.用Visual C#中实现DB2数据库编程.
.用C#代码编写的SN快速输入工具.
.用C#把文件转换为XML.
.同步http处理程序(IHttpHandler) .

用API得到局域网中可用SqlServer服务器列表

发表日期:2005-2-5


    无意中找到了以前的一个C#程序,觉得好用发到这里以便和大家共享一下,其实这个代码我是抄别人过来的,原作者不详,觉得写的好就和大家共享一下了程序实现了用API来得到SqlServer服务器列表的功能,我觉得比用SQLDEMO组件更有意义,代码如下:


/// <summary>

/// 获取网内的数据库服务器名称

/// </summary>

public class SqlLocator

{

     [System.Runtime.InteropServices.DllImport("odbc32.dll")]

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

     [System.Runtime.InteropServices.DllImport("odbc32.dll")]

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

     [System.Runtime.InteropServices.DllImport("odbc32.dll")]

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

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

     private static extern short SQLBrowseConnect(IntPtr hconn, System.Text.StringBuilder inString,

         short inStringLength, System.Text.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(){}

 

     /// <summary>

     /// 获取网内的数据库服务器名称,是一个字符串数组。

     /// </summary>

     /// <returns></returns>

     public static string[] GetServers()

     {

         string list = string.Empty;

         IntPtr henv = IntPtr.Zero;

         IntPtr hconn = IntPtr.Zero;

         System.Text.StringBuilder inString = new System.Text.StringBuilder(SQL_DRIVER_STR);

         System.Text.StringBuilder outString = new System.Text.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.");

                                     }   

                                 }

                                 list = outString.ToString();

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

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

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

                                 {

                                     list = list.Substring(start,len);

                                 }

                                 else

                                 {

                                     list = string.Empty;

                                 }

                            }                          

                        }

                   }

              }

         }

         catch

         {

              list = string.Empty;

         }

         finally

         {

              if (hconn != IntPtr.Zero)

              {

                   SQLFreeHandle(SQL_HANDLE_DBC,hconn);

              }

              if (henv != IntPtr.Zero)

              {

                   SQLFreeHandle(SQL_HANDLE_ENV,hconn);

              }

         }

 

         string[] array = null;

 

         if (list.Length > 0)

         {

              array = list.Split(',');

         }

 

         return array;

     }

}

上一篇:C#中使用SendMessage 人气:18566
下一篇:怎样在你的应用程序中集成Google搜索? 人气:12966
浏览全部Sql Server的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐