通过c#启动SQL Server

本文关键字:Server SQL 启动 通过 | 更新日期: 2023-09-27 18:12:06

当我启动我的PC时,Sql Server (SQLExpress)没有运行,它在我试图在Visual studio 2010中编译我的程序时启动。

可以通过c#启动吗?我的问题是,如果我使用。exe没有Visual studio,它告诉我Sql Server没有运行。

通过c#启动SQL Server

我将更改Sql Server Windows Service的启动模式为自动。但你也可以在c#中这样做,但我不推荐这样做。还有其他问题,比如访问安全等等。

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.FileName = "net start '"Sql Server (SQLEXPRESS)'"";
        process.Start();

Sql Server (SQLEXPRESS)是你的服务名

下面是如何在c#中使用SMO:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Smo.Wmi;
using Microsoft.SqlServer.Management.Common;
static class SQLStart
{
    public static void StartSQLService()
    {
        //Declare and create an instance of the ManagedComputer object that represents the WMI Provider services.
        ManagedComputer mc = default(ManagedComputer);
        mc = new ManagedComputer();
        //Iterate through each service registered with the WMI Provider.
        Service svc = default(Service);
        foreach ( svc in mc.Services) {
            Console.WriteLine(svc.Name);
        }
        //Reference the Microsoft SQL Server service.
        svc = mc.Services("MSSQLSERVER");
        //Stop the service if it is running and report on the status continuously until it has stopped.
        if (svc.ServiceState == ServiceState.Running) {
            svc.Stop();
            Console.WriteLine(string.Format("{0} service state is {1}", svc.Name, svc.ServiceState));
            while (!(string.Format("{0}", svc.ServiceState) == "Stopped")) {
                Console.WriteLine(string.Format("{0}", svc.ServiceState));
                svc.Refresh();
            }
            Console.WriteLine(string.Format("{0} service state is {1}", svc.Name, svc.ServiceState));
            //Start the service and report on the status continuously until it has started.
            svc.Start();
            while (!(string.Format("{0}", svc.ServiceState) == "Running")) {
                Console.WriteLine(string.Format("{0}", svc.ServiceState));
                svc.Refresh();
            }
            Console.WriteLine(string.Format("{0} service state is {1}", svc.Name, svc.ServiceState));
        } else {
            Console.WriteLine("SQL Server service is not running.");
        }
    }
}

这只是MS的VB.net示例的转换。这里都解释了:http://msdn.microsoft.com/en-us/library/ms162139(v=sql.90).aspx

不要在代码中这样做。这是非常罕见的必要/有用的。不要重新发明轮子:

在管理工具中查看计算机的服务管理器。您应该在那里看到SQL Server Express的实例。您可以从那里手动启动它,也可以将其设置为通过服务属性中的设置自动启动。在"启动类型"组合框中设置为"自动"。

Follow up:正如所建议的,有许多不同的方法来启动服务器/服务。我看到的非服务建议的问题是,您将不必要地引入安全性、配置和其他管理开销。SQL Server作为服务运行是一个很好的范例。再说一遍,不要重新发明轮子。

你可以使用一个批处理脚本存储在Win7的任务栏或者你点击的桌面上。假设你只是想通过c#来完成它,以避免进入另一个应用程序。如果你需要在应用程序中使用c#编写,那么这可能不是你寻找的解决方案。

看这里http://www.bidn.com/blogs/briankmcdonald/bidn-blog/1011/restarting-sql-server-using-a-batch-script

有很多方法可以解决这个问题。总的来说,除非您在其他人的机器上运行时需要此功能,否则我会将服务设置为自动,就像dknaack建议的那样。即使在别人的机器上,我也会在安装程序中设置"将服务设置为自动",而不是将其作为应用程序的一部分。

要在SQL Server中用c#代码控制服务,microsoft . sqlserver . management . sm . wmi . service类是一个选择。对于更通用的选项,有System.ServiceProcess.ServiceController。看到SQL对象中的WMI了吗?这是一个很好的指标,脚本是另一个不错的选择(甚至可能更可重用?)

这是一个SMO WMI c#代码示例,列出SQL服务,检查服务状态,启动SQL服务等。

如何使用c#中的SMO WMI


有用的SQL工具