我正在使用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;
}
}
答案 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();