使用C#使用文本文件中的现有脚本创建数据库,表和存储过程

时间:2014-01-16 14:28:14

标签: c# sql-server winforms generate-scripts

我使用winformC# 2008开发了SQL Server应用程序。现在我的工作是在客户端的计算机上实现它。 我正在寻找在客户端计算机上创建database tablesstored procedure以运行此应用程序的最佳方法。我已经生成了我所有数据库objects的脚本。现在我想在客户端的机器上创建所有数据库对象,只需单击C#代码,读取每个表或存储过程脚本文件(即.sql或.txt)并创建它们。

3 个答案:

答案 0 :(得分:1)

不需要smo,但有点难看

 SqlCommand getDataPath = new SqlCommand("select physical_name from sys.database_files;", baseConnection); // get default path where the sqlserver saves files
            string temp = getDataPath.ExecuteScalar().ToString();
            temp = temp.Replace(temp.Split('\\').Last(), string.Empty);
            StringBuilder sqlScript = new StringBuilder(Scripts.CreateDatabase); //CreateDatabase could be in ressources
            ///The @@@@ are used to replace the hardcorededpath in your script
            sqlScript.Replace("@@@@MAINDATAFILENAME@@@@", string.Concat(temp, "test.mdf"));
            sqlScript.Replace("@@@@LOGDATAFILENAME@@@@", string.Concat(temp, "test_log.ldf"));
            string[] splittedScript = new string[] { "\r\nGO\r\n" }; //remove GO
            string[] commands = sqlScript.ToString().Split(splittedScript,
              StringSplitOptions.RemoveEmptyEntries);

然后在命令(SqlCommand cmd = new SqlCommand(command[x], baseConnection);

中运行每个命令

注意:由于某些原因,这需要管理员,因此请创建一个清单文件。

答案 1 :(得分:0)

您需要使用SMO来完成此任务。正常的ADO.NET会抱怨多语句执行等。一旦与SMO集成并拥有脚本,这真的很容易。

答案 2 :(得分:0)

Visual Studio支持数据库项目,可为您生成部署脚本。它还允许从头开始部署或升级现有数据库。部署可以作为Visual Studio或构建服务器中的构建的一部分进行自动化。如果您正在使用TFS,您也可以对数据库进行源代码控制。

基本上不再乱用脚本了!

http://msdn.microsoft.com/en-us/library/ff678491(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/xee70aty.aspx