![](/img/trans.png)
[英]Running a SQL script (Transact-SQL) with a HostedService [ASP.NET CORE 3.1.0 C#]
[英]Running SQL script using C# code ASP.NET Core
public class ClassApp
{
static string ServerName = "LAPTOP-xxxxxxRK\\SQLEXPRESS";
static string DatabaseName = "NewDbInstance";
private SqlConnection tmpConn;
public void CreateDb()
{
SqlConnection tmpConn;
string sqlCreateDBQuery;
tmpConn = new SqlConnection();
tmpConn.ConnectionString = "SERVER = " + ServerName + "; Trusted_Connection=True;";
sqlCreateDBQuery = " CREATE DATABASE " + DatabaseName;
SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, tmpConn);
try
{
tmpConn.Open();
Console.WriteLine(sqlCreateDBQuery);
var result = myCommand.ExecuteNonQuery();
Console.WriteLine(result);
Console.WriteLine("Database has been created successfully!");
if (result == -1)
{
RunScript(DatabaseName);
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void RunScript(string dbName)
{
FileInfo file = new FileInfo("C:\\Users\\ADMIN\\script.sql");
string script = file.OpenText().ReadToEnd();
script = script.Replace("GO", "");
SqlConnection tmpConn;
tmpConn = new SqlConnection();
tmpConn.ConnectionString = "Server=LAPTOP-xxxxxxRK\\SQLEXPRESS;" + "Database=" + dbName + "; Trusted_Connection=True;";
tmpConn.Open();
SqlCommand myCommandnew = new SqlCommand(script, tmpConn);
var resultnew = myCommandnew.ExecuteNonQuery(); //Error comes here
Console.WriteLine(resultnew);
tmpConn.Close();
}
所以我有两个问题
'CREATE SCHEMA' 必须是查询批处理中的第一条语句。
如何解决这个问题呢?
DECLARE @dbname nvarchar(128)
SET @dbname = N'DatabaseName'
IF (EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname
OR name = @dbname)))
发生该错误是因为某些 SQL DDL 命令必须作为 SQL 批处理的第一条语句执行,该批处理在 SSMS 中由“GO”语句分隔。
要使用“GO”语句运行脚本,而不是解析它们并创建其他错误,请使用 Microsoft.SqlServer.Smo 库。 它将脚本作为单独的批次处理,而不会遇到从现有脚本中删除“GO”的麻烦问题。
您的代码看起来非常类似于:
using (SqlConnection connection = ...)
{
Server server = new Server(new ServerConnection(connection));
try
{
server.ConnectionContext.ExecuteNonQuery(script);
}
catch (Exception e) {...}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.