本帖最后由 lht80053623 于 2010-08-30 10:18:33 编辑

解决方案 »

  1.   

    //添加windows服务所需引用空间System.Service.Process.dll
    using System.ServiceProcess;public static bool ExistSqlServerService()
      {
       bool ExistFlag=false;
       ServiceController[]   service=ServiceController.GetServices();   
       for(int   i=0;i<service.Length;i++)   
       {   
        if   (service[i].DisplayName.ToString()=="MSSQLSERVER")   
        {  
         ExistFlag=true;   
        }   
       }   
       return ExistFlag;
      }
      

  2.   

    我使用了
    private static ServiceController sc = new ServiceController("MSSQLSERVER","192.168.1.13");
    if (sc.Status==ServiceControllerStatus.Running )
                        dbConnection.Open();
    由于sql服务运行在其他机器上,vs编译运行提示,权限不够,无法操作192.168.1.13
      

  3.   

    ServiceController   sc   =   new   ServiceController( "Telnet "); 
                      if((sc.Status.Equals(ServiceControllerStatus.Stopped))   || 
                                (sc.Status.Equals(ServiceControllerStatus.StopPending))) 
                      { 
                            sc.Start(); 
                      }     
                      else 
                      {  
                            sc.Stop(); 
                      }     
      

  4.   

    使用ServiceController 还存在一个问题,远程计算机的sql服务如果未开启,还会陷入无响应状态一段时间,最终弹出错误和开启服务器的错误一样,都是权限不够 
    我试了3种情况,
    1、远程的sql服务启动  会立即弹出错误 无权限,拒绝访问
    2、远程的sql服务停止  会立即弹出错误
    3、远程计算机关闭     会停止响应后弹出错误三种情况抛出的错误一摸一样!
      

  5.   

    使用ServiceController 还存在一个问题,远程计算机的sql服务如果未开启,还会陷入无响应状态一段时间,最终弹出错误和开启服务器的错误一样,都是权限不够 
    我试了3种情况,
    1、远程的sql服务启动  会立即弹出错误 无权限,拒绝访问
    2、远程的sql服务停止  会立即弹出错误
    3、远程计算机关闭     会停止响应后弹出错误三种情况抛出的错误一摸一样!
      

  6.   

    在连接之前先判断,如果是打开的则将连接关闭后再重新打开,如果不是,则直接打开
            private static SqlConnection connection;
            public static SqlConnection Connection
            {
                get
                {
                    string connectionString = @"";//数据库连接语句
                    if (connection == null)
                    {
                        connection = new SqlConnection(connectionString);
                        connection.Open();
                    }
                    else if (connection.State == System.Data.ConnectionState.Closed)
                    {
                        connection.Open();
                    }
                    else if (connection.State == System.Data.ConnectionState.Broken)
                    {
                        connection.Close();
                        connection.Open();
                    }
                    return connection;
                }
            } 
      

  7.   

           public static bool ConnectionState()
            {
                SqlConnection cn = new SqlConnection();
                bool returnResult = false;
                try
                {
                    if (cn.State == ConnectionState.Open)
                    {
                        cn.Open();
                        returnResult = true;
                    }
                }
                catch
                {
                   MessageBox.Show("提示信息");//给用户的提示信息
                }
                finally
                {
                    cn.Close();
                }
                returnResult;//根据返回的信息来判断连接状态如果为true那么就连接成功否则就失败可以弹出提示框给用户
            }
      

  8.   

    if (cn.State == ConnectionState.Open)
      {
      cn.Open();
      returnResult = true;
      }是我看错了还是你弄错了???  if (cn的状态为open)执行 cn.open???
      

  9.   

    直接用 socket 连接测试
      

  10.   

    使用tcp连接服务器的1433端口是一种方法.
    使用sqlconnection连接数据库服务器也是一种方法.
    当然你也可以检查服务是否启动.这种方法对远程计算机好像不行.