通过c#启动SQL Server
本文关键字:Server SQL 启动 通过 | 更新日期: 2023-09-27 18:12:06
当我启动我的PC时,Sql Server (SQLExpress)没有运行,它在我试图在Visual studio 2010中编译我的程序时启动。
可以通过c#启动吗?我的问题是,如果我使用。exe没有Visual studio,它告诉我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工具