马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

C# 做Sqlserver服务器配置小程序

  [复制链接]
查看11278 | 回复14 | 2014-8-1 11:33:03 | 显示全部楼层 |阅读模式
本帖最后由 cenbz 于 2014-8-1 11:43 编辑

之前给同学做过sql server 的配置向导,原因是做了个积分管理的应用程序,程序和数据库的连接语句是加密后放到一个特殊文件里的,因为管理程序要到别的电脑上运行,所以数据的连接要重新配置。配置程序的主要核心是如何获取本地电脑和局域网内的所有可见数据库服务器。在网上有个大牛给出了个示例代码,具体连接没记下。在这里给出他的获取sql服务器的代码:
[C#] 纯文本查看 复制代码
      #region 声明和定义
        [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";

        #endregion


[C#] 纯文本查看 复制代码
/// <summary>
        /// 获取本地上或局域网内的数据库
        /// </summary>
        /// <returns></returns>
        public static string[] GetServers()
        {
            string list = 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.");
                                    }
                                }

                                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;
        }



//GetServers()这个函数返回服务器名称的字符串数组
我们可以使用 comboBox控件来提供选择:comboBox1.Items.AddRange(GetServers());
配置向导的界面参考下面图示,其他的功能代码不难。  这里获取服务器的数据库的SQL语句是:"select * from sysdatabases where sid<>0x01" ////where sid<>0x01是不选择自带的系统数据库。

服务器配置界面

服务器配置界面
ibcadmin | 2014-8-1 13:33:07 | 显示全部楼层
此帖仅作者可见
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区

使用道具 举报

惜鑫 | 2014-8-1 13:35:25 | 显示全部楼层
此帖仅作者可见

使用道具 举报

songyusb | 2014-8-1 13:36:21 | 显示全部楼层
此帖仅作者可见

使用道具 举报

阿甘大手 | 2014-8-1 13:38:38 | 显示全部楼层
此帖仅作者可见

使用道具 举报

ibcadmin | 2014-8-1 13:39:58 | 显示全部楼层
此帖仅作者可见
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区

使用道具 举报

21jj | 2014-8-1 15:05:30 | 显示全部楼层
此帖仅作者可见

使用道具 举报

bbhh | 2014-8-3 13:20:35 | 显示全部楼层
此帖仅作者可见

使用道具 举报

Testing_C# | 2014-8-7 15:48:53 | 显示全部楼层
此帖仅作者可见

使用道具 举报

wodeyim | 2015-7-12 08:19:41 | 显示全部楼层
此帖仅作者可见

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则