`
sodart
  • 浏览: 28159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

代码开启sql2005远程连接功能

阅读更多

       背景:去年曾经开发过一款基于单机版的进销存系统,是基于sqlexpress 2005 数据库。考虑到时单机版,所以在打包的时候将sqlexpress 也直接打到压缩包中了,这样比较方便,完全自动安装,包括初始化数据库,初始化数据都是些在代码当中,客户在安装的时候只需要点下一步即可。

      新需求:要求曾经的单机版程序需要在局域网内访问。

      解决办法:系统分为两个版本,服务版安装数据库,客户版不安装数据库。将服务版sqlexpress数据库开启远程服务,然后客户版连接服务版上的数据库。

      新问题:用户计算机水平非常低,又不能全部上门服务,要求所有操作通过代码自动实现。

      1. 设置sqlexpress数据库允许通过账号混合模式验证登陆(默认是windows身份验证)

以下为实现代码:

            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey MSSQLServer = hklm.OpenSubKey("SOFTWARE", true)
                                       .OpenSubKey("Microsoft", true)
                                       .OpenSubKey("Microsoft SQL Server", true)
                                       .OpenSubKey("MSSQL.1", true)
                                       .OpenSubKey("MSSQLServer", true);
            MSSQLServer.SetValue("LoginMode", 2);

 

      2. 设置sqlexpress数据库允许远程连接访问(开启TCP/IP访问协议)

以下为实现代码:

            RegistryKey Tcp = MSSQLServer.OpenSubKey("SuperSocketNetLib", true)
                                         .OpenSubKey("Tcp", true);
            Tcp.SetValue("Enabled", 1);

 

     3. 使系统sa账号可用,并设置sa的密码为sa2005(默认sa状态为不可用)

以下为实现代码:

            string strConn = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=master;";
            strConn += "trusted_connection=sspi;Connect Timeout=30";
            SqlConnection conn = null;
            try
            {
                conn = new SqlConnection(strConn);
                conn.Open();
                SqlCommand command = new SqlCommand("Alter LOGIN sa ENABLE ; Alter LOGIN sa WITH PASSWORD = 'sa2005' ; ", conn);
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

 

      4. 重新启动服务,并将服务设置为Automatic。

以下为实现代码:

                ServiceControllerEx scEx = new ServiceControllerEx("SQL Server Browser");
                scEx.StartupType = "Automatic";
                if (scEx.Status != ServiceControllerStatus.Running)
                {
                    scEx.Start();          
                }
                ServiceControllerEx SQLServer = new ServiceControllerEx("SQL Server (SQLEXPRESS)");
                if (SQLServer.Status == ServiceControllerStatus.Running)
                {
                    SQLServer.Stop();

                    while (SQLServer.Status != ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(200);
                        SQLServer.Refresh();
                    }
                    SQLServer.Start();
                    while (SQLServer.Status != ServiceControllerStatus.Running)
                    {
                        Thread.Sleep(200);
                        SQLServer.Refresh();
                    }
                }
                else
                {
                    SQLServer.Start();                
                }
            }

 

     5. ServiceControllerEx 类,对系统ServiceController的扩展。

    class ServiceControllerEx : ServiceController
    {
        public ServiceControllerEx()
            : base()
        { }
        public ServiceControllerEx(string name)
            : base(name)
        { }
        public ServiceControllerEx(string name, string machineName)
            : base(name, machineName)
        { }
        public string StartupType
        {
            get
            {
                if (this.ServiceName != null)
                {
                    //construct the management path
                    string path = "Win32_Service.Name='" + this.ServiceName + "'";
                    ManagementPath p = new ManagementPath(path);
                    //construct the management object
                    ManagementObject ManagementObj = new ManagementObject(p);
                    return ManagementObj["StartMode"].ToString();
                }
                else
                {
                    return null;
                }
            }
            set
            {
                if (value != "Automatic" && value != "Manual" && value != "Disabled")
                    throw new Exception("The valid values are Automatic, Manual or Disabled");

                if (this.ServiceName != null)
                {
                    //construct the management path
                    string path = "Win32_Service.Name='" + this.ServiceName + "'";
                    ManagementPath p = new ManagementPath(path);
                    //construct the management object
                    ManagementObject ManagementObj = new ManagementObject(p);
                    //we will use the invokeMethod method of the ManagementObject class
                    object[] parameters = new object[1];
                    parameters[0] = value;
                    ManagementObj.InvokeMethod("ChangeStartMode", parameters);
                }
            }

        }
    }

       6. 客户端方法(为了那些计算机名都不会看的客户),检测可连接的数据库。

需要引入COM组件 Microsoft SQLDMO Object Library,无需注册。

            SQLDMO.ApplicationClass sqlApp = new SQLDMO.ApplicationClass();
            SQLDMO.NameList nameList;
            int i = 0;
            nameList = sqlApp.ListAvailableSQLServers();
            for (i = 1; i < nameList.Count; i++)
            {   
                MessageBox.Show(nameList.Item(i).ToString());
            }

 

通过这6步,达到完全代码开启sqlexpress远程服务。

如果sqlexpress数据库安装在win7 系统下,需要关闭防火墙,或者为1434端口和sqlserver.exe设置例外。

1
0
分享到:
评论

相关推荐

    C#远程连接SQLserver 数据库

    在实际应用中,如果要远程连接到其他服务器上的SQL Server数据库,需要将"server=."替换为远程服务器的IP地址或主机名。 在使用数据库文件(如MDB.mdf)时,需要注意的是,直接在应用程序中引用数据库文件并不总是...

    sql_2005的远程连接数据库

    本文将详细介绍如何在SQL Server 2005中启用远程连接功能,并提供相关的配置步骤和注意事项。 #### 二、开启远程连接功能 要使SQL Server 2005支持远程连接,我们需要进行以下几步操作: ##### 1. 启用SQL Server ...

    VB网络版系统开发——远程连接SQL2000数据库代码

    在VB(Visual Basic)开发网络版系统时,远程连接到SQL Server 2000数据库是一项重要的技术。这里,我们将详细探讨如何实现这一功能,并基于给出的部分代码进行解析。 首先,我们关注`PublicVar`模块,这个模块定义...

    SQL2005+ASP.NET2.0数据库连接

    在SQL Server 2005中,为了使远程计算机能够访问数据库,需要开启远程连接功能。通过配置工具中的SQL Server外围应用配置器,选择“服务和连接的外围应用配置器”,打开MSSQLSERVER节点下的Database Engine节点,...

    c#与sql 2005的连接,讲解,详细

    在SQL Server 2005中,需要开启远程连接功能。这通常通过“SQL Server 外围应用配置器”完成。在“服务和连接的外围应用配置器”中,选择“Database Engine”,然后在“远程连接”下选择“同时使用TCP/IP和named ...

    PB远程连接SQL+SERVER数据库(支持动态IP)

    4. **SQL Server配置**:SQL Server需开启TCP/IP协议,并允许远程连接。在SQL Server Management Studio中,需要确保“远程连接”选项被启用。 5. **防火墙设置**:服务器和客户端的防火墙需要开放相应的端口(如...

    JDBC连接SQL2005解决办法

    - 对于“SQLEXPRESS”,选择“远程连接”,允许同时使用TCP/IP和Named Pipes。 - 对于“SQL Server Browser”,将启动类型改为“自动”,并启动服务。 2. **修改登录验证模式**: - 在“SQL Server Management ...

    实现Sqlserver2005的远程备份

    在SQL Server 2005中,远程备份是确保数据安全和高可用性的重要操作,尤其是在涉及财务数据等关键信息时。远程备份允许数据库管理员在不同的服务器之间进行数据的跨网络备份,以防止本地服务器故障导致的数据丢失。...

    vb6连接SQL2005数据库 查询实例

    这个“vb6连接SQL2005数据库Demo完全版”应该包含了完整的代码示例,展示了如何在VB6中建立连接、执行查询、删除操作。通过学习和理解这段代码,你可以轻松地在自己的项目中实现类似的功能。 标签“vb sql server ...

    wince连接远程sqlserver数据库

    总之,连接Wince到远程SQL Server数据库涉及安装正确的.NET Compact Framework版本、配置SQL Server和网络,以及编写适当的代码。理解sqlclient.dll和dbnetlib.dll的角色是解决问题的关键,而良好的错误处理和资源...

    远程连接数据库的设置步骤

    - 打开SQL Server Management Studio,连接至服务器。 - 在“对象资源管理器”中找到服务器(例如4313543D5E24E5\SQLEXPRESS),右键选择“属性”。 - 在“安全性”选项卡中,选择“SQL Server和Windows身份验证模式...

    DataQurey Sqlserver 远程浏览工具

    DataQurey是针对SQLServer数据库的一款高效、易用的远程访问工具,其核心功能包括数据库连接、查询执行、数据编辑、数据库对象浏览等。它简化了数据库管理过程,使得用户无需安装完整的数据库管理系统即可远程操作...

    使用VS 2005和SQL Server 2005创建连接

    ”这通常是由于SQL Server 2005的远程连接功能未被启用或身份验证模式设置不当所致。 ##### 3.1 启用远程连接 **步骤1:** 打开“SQL Server外围应用配置器”。 - 在SQL Server配置管理器中,找到并点击“配置...

    连接Sql2005数据库代码及配置文件

    总的来说,连接到SQL Server 2005数据库涉及到配置文件的管理和代码的编写,其中配置文件用于存储敏感信息,如连接字符串,而代码则负责建立、打开、关闭连接以及执行数据库操作。通过`App1.config`和`ConnectionDB....

    jsp连接sql2005配置

    为了使JSP能够连接到SQL Server 2005数据库,我们需要进行一系列的配置步骤。下面将详细介绍这些配置过程。 首先,我们关注的是SQL Server的身份验证模式。SQL Server提供了两种身份验证模式:Windows身份验证和SQL...

    连接远程SQL Server数据库并执行SQL语句

    ### 连接远程SQL Server数据库并执行SQL语句 在IT行业中,远程访问数据库是非常常见的需求之一,尤其是在分布式系统或需要跨地域管理数据的情况下。本文将详细介绍如何通过编程方式连接到一个位于远程服务器上的SQL...

    MFC连接sql server类代码

    总之,`Connectsql.cpp`和`Connectsql.h`文件中的代码很可能包含了一系列用于连接SQL Server 2000、执行SQL语句和处理结果的MFC函数。通过理解这些类和步骤,开发者可以有效地利用MFC进行数据库操作,实现应用程序与...

    pl sql远程连接oracle

    一旦你成功建立了远程连接,就可以使用PL/SQL Developer进行各种数据库操作,如编写存储过程、触发器、函数,查看和管理表、索引,执行SQL查询,甚至调试PL/SQL代码。这是一个强大的工具,对于远程Oracle数据库的...

    sql2005连接jar包

    这是默认的TCP/IP端口,用于SQL Server的远程连接。可以在SQL Server Configuration Manager中检查并启用此端口。 4. **编写Java代码**:使用JDBC API编写Java代码来建立数据库连接。以下是一个基本示例: ```java...

    visual-CSharp-SQL.rar_C#与SQL_C#连接sql_c#外地连接sql_c#连接远程sql_c# sql

    本资源“visual-CSharp-SQL.rar”是关于如何使用C#与SQL Server进行交互的一个实例,主要关注C#连接本地及远程SQL数据库的方法。下面我们将详细探讨这些知识点。 首先,C#与SQL Server的连接主要依赖于ADO.NET库,...

Global site tag (gtag.js) - Google Analytics