您的位置:首页 > 数据库

SQL Server Express 自动安装实现

2010-12-03 23:13 357 查看
为了偷点“懒”,避免每次给用户安装系统时都要交给用户怎么样安装SQL Server,减少各种“麻烦”,终于狠心研究并整理了一下SQL Server自动安装的过程。本次使用的是SQL Server 2005Express,可从MSND中进行下载。

SQL Server 2005提供了很强大的功能,强大到至今都没有用到过。用的最多也是最基本的就是数据的存取,查询等。所以在给用户安装一个小型桌面程序时,也必要给客户安装一个文件大小2、3G的SQL Server吗,至少我认为这是一个很傻的选择,而且在这之前我一直这么很傻的干着。

转入正体,下面就说说SQL Server Express。

“Microsoft SQL Server 2005 Express Edition 是一种免费、易用的轻量版 SQL Server 2005,具有快速且易于掌握的特点,可用于快速开发和部署动态数据驱动的应用程序。” ----MSDN

前提是功能,因为我只用到了数据库的基本功能,数据存取、更新,包括存储过程,事务等,Express版本已经完全满足,并且使用和开发也其他版本没有任务区别,更重要的是“免费”,哈哈哈~~

OK,SQL Server2005 Express也分为32位和64位版本,考虑到客户机的不现系统,建议统一下载64位的版,因为可以同时在32的系统中进行安装,而32的位版本就不能在64位的系统中安装,这我可是试过的。下载地址:

http://www.microsoft.com/downloads/details.aspx?familyid=31711D5D-725C-4AFA-9D65-E4465CDFF1E7&displaylang=zh-cn

还有一个需要注意的问题就是安装SQL Server 2005Express版本之前,系统需要安装.net Framework2.0,对于Vista和Win7的系统来说就不必了,可直接安装;2003系统和XP可能需要单独安装。因我的程序使用的都是.net进行开发的,所以必须首先进行.Net framework的安装,在这就没有考虑怎么自动安装。

自动安装思路:

1 使用命令行解压SQLExpr安装包(我把下载后的安装文件重命为SQLexpr),解压命令为 SQLexpr.exe /x <dir> /q

下图是解压后的目录结构:

代码

void CreateDataBase()
{
/*
* 创建数据库
* 1.连接数据库(以Windows验证)
* 2.获取数据库安装目录(..\MSQL\Data\)
* 3.创建安装脚本,并通过SqlCmd命令执行脚本。
*/
String SmoRootPath = String.Empty;

using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(
@" exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\Setup', N'SQLPath', @SmoRoot OUTPUT"
, conn);
cmd.CommandType = CommandType.Text;
SqlParameter rootPath = new SqlParameter("SmoRoot", SqlDbType.VarChar, 512);
rootPath.Direction = ParameterDirection.Output;
cmd.Parameters.Add(rootPath);
cmd.ExecuteNonQuery();
SmoRootPath = cmd.Parameters[0].Value.ToString();
conn.Close();
}

if (!string.IsNullOrEmpty(SmoRootPath))
{
//记录位置 HealthOneInBody SmoRootPath

ShowMsg("开始创建数据库文件...");
SmoRootPath = SmoRootPath + "\\Data\\";
String paths = AppPath + "db2005tp.sql";

CreateSql(paths, SmoRootPath);

Process sqlProcess = new Process();
sqlProcess.StartInfo.FileName = "sqlcmd.exe";
sqlProcess.StartInfo.Arguments = String.Format(" -S {0} -i \"{1}\"", System.Net.Dns.GetHostName() + @"\[实例名]", paths);
sqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
sqlProcess.Start();
sqlProcess.WaitForExit();//'等待执行
ShowMsg("数据库文件创建完成...");
try
{
File.Delete(paths);
}
catch { }
}

}

/// <summary>
/// 数据库名:Dataname 文件名:Dataname.mdf Dataname.ldf ///
/// </summary>
/// <param name="paths">sql脚本文件路径</param>
/// <param name="dataPath">数据库文件路径</param>
private void CreateSql(String paths, String dataPath)
{
StringBuilder s = new StringBuilder();
s.AppendLine(String.Format("exec sp_attach_db @dbname=N'Dataname', @filename1=N'{0}Dataname.MDF',@filename2=N'{0}Dataname.LDF'", dataPath));

using (System.IO.StreamWriter configFile = new System.IO.StreamWriter(paths))
{
configFile.Write(s.ToString());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: