在c#中的sql文件中运行现有数据库上的脚本

时间:2016-08-18 13:26:52

标签: c# sql-server

我创建了一个空数据库。我需要在这个空数据库上运行脚本。 到目前为止,我已经从网站上找到了代码:

public bool RunScript()
        {
            try
            {

                SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-PCEOPRM\SQLEXPRESS;Initial Catalog=" + DbName + ";Integrated Security=True");


                con.Open();
                string script = File.ReadAllText(@"C:\inetpub\wwwroot\MetisTemplateDBScript\MetisEmptyDBScript.sql");
                IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$",
                           RegexOptions.Multiline | RegexOptions.IgnoreCase);

                foreach (string commandString in commandStrings)
                {
                    if (commandString.Trim() != "")
                    {
                        using (var command = new SqlCommand(commandString, con))
                        {
                            command.ExecuteNonQuery();
                        }
                    }
                }
                con.Close();

                return true;
            }catch(Exception exc)
            {
                return false;
            }
        }

但是当我运行它时,由于&#39; \ n&#39;,&#39; \ r&#39;或简单斜线等 是否有一些从sql文件运行大型脚本的正确方法? 我的文件还包含GO语句。

这不是一个重复的问题,因为它有两件事1)Go命令和2)转义字符。

谢谢你提前!

1 个答案:

答案 0 :(得分:1)

SQL Server附带一个名为SqlCmd(password_hash)的命令行SQL执行实用程序。您可以使用它来执行任何有效的脚本。如果确实需要从C#运行它,可以使用System.Diagnostics.Process命名空间类来启动执行SqlCmd的进程。