我有一个简单的.sql文件,如下所示:
USE [master]
GO
CREATE DATABASE [NEW_DATABASE]
GO
当我从SSMS运行它时,它工作正常,创建了NEW_DATABASE数据库。但是,我试图通过将其用作C#程序中的嵌入式资源来运行此命令。这个.sql文件的最终版本会复杂得多,但是现在,我只是想让这个简单的脚本工作。
以下是我采取的步骤:
1) I added a resource file (named SqlFiles) to my project.
2) I opened the resource file within VS and added a new file
resource, "create.sql".
3) I saved the resource file.
然后,在我的代码中,我有以下内容:
// If database doesn't exist, run the script to create it.
if (dbExists == false)
{
using (var connection = new SqlConnection("Data Source=" + computerName + "\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = SqlFiles.create;
command.ExecuteNonQuery();
}
}
运行程序时,执行命令时出现以下错误:
Incorrect syntax near 'GO'.
然而,正如我所说的,如果我在SSMS中打开同一个文件并执行它,它就可以正常运行。
我注意到当我将鼠标悬停在调试中的command
变量上时,CommandText的值似乎包含格式化文本(返回字符,而不是):
USE [master]\r\nGO\r\nCREATE DATABASE [NEW_DATABASE]\r\nGO\r\n
这可能是这个问题吗?
答案 0 :(得分:4)
GO关键字不是T-SQL,换句话说就是c#与数据库交互的方法。 Go是一个Sql Server Managent Studio关键字,它告诉SQL脚本作为单独的命令执行。所以SSMS在GO脚本中分批运行。
您需要自己单独分开并运行批次,并告诉每个批次执行。或者,如果未生成脚本,我将它们存储为存储过程并将我的参数传递给它。