从ASP.Net C#应用程序性能问题运行SQL脚本

时间:2017-05-06 23:27:08

标签: c# sql asp.net

我正在使用C#代码运行SQL脚本,我的问题是代码需要很长时间才能完成执行,它有很多表要在脚本中创建(至少30个表),所以我的代码工作但它有性能问题。 这是代码

public static bool executeSqlScript(string scriptPath,string serverName,string databaseName)
    {
        try
        {

            SqlConnection myConn = new SqlConnection("Server=.;Integrated security=SSPI;database=master");
            Server server = new Server(new ServerConnection(myConn));
            string CreateCommand = "CREATE DATABASE " + databaseName + "";
            string appendText;
            //delete first line from script(Oldscript)
            var lines = File.ReadAllLines(scriptPath).Skip(1);
            File.WriteAllLines(scriptPath, lines);
            using (StreamReader sreader = new StreamReader(scriptPath))
            {
                appendText = sreader.ReadToEnd();
            }
            File.Delete(scriptPath);
            using (StreamWriter swriter = new StreamWriter(scriptPath, false))
            {
                appendText = "USE [" + databaseName + "]" + Environment.NewLine + appendText;
                swriter.Write(appendText);
                swriter.Close();
            }
            string readtext = File.ReadAllText(scriptPath);
            SqlCommand myCommand = new SqlCommand(CreateCommand, myConn);
            myConn.Open();
            myCommand.ExecuteNonQuery();
            server.ConnectionContext.ExecuteNonQuery(readtext);

            return true;
        }
        catch (Exception e)
        {
         throw e;
         return false;
        }
    }

2 个答案:

答案 0 :(得分:1)

我的建议是将大部分内容迁移到SQL Server,一旦设置了新的数据库和用户,就调用存储过程来读取其中包含必要DDL的SQL文件。

我的上一个项目是托管托管公司,我们的CMS使用了超过150个数据库对象。我们使用了"控制"我们传递新数据库信息的数据库,它通常会在不到一分钟的时间内终止新的表,函数和程序。

答案 1 :(得分:0)

问题在于脚本中的Go Keyword,我找到了这个解决方案

http://www.codingdefined.com/2014/07/run-sql-script-file-in-c.html

(如果您尝试执行SQL生成的脚本文件,则必须删除所有“GO”。为此,您必须使用以下代码...)

这是我的代码:

        string sqlConnectionString = "Data Source=.;Initial Catalog=master;Integrated Security=True";
        FileInfo file = new FileInfo(@"D:\Script.sql");
        string script = file.OpenText().ReadToEnd();
        SqlConnection conn = new SqlConnection(sqlConnectionString);
        conn.Open();
        script = script.Replace("GO", "");
        SqlCommand cmd = new SqlCommand(script, conn);
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        conn.Close();