运行 来自 C# 的嵌入式 SQL 文件出错,但来自 SSMS 的 运行 没有
Running embedded SQL file from C# gets errors, but running from SSMS does not
我有一个简单的 .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 的值似乎包含格式文本(return 个字符):
USE [master]\r\nGO\r\nCREATE DATABASE [NEW_DATABASE]\r\nGO\r\n
会不会是这个问题?
GO 关键字不是 T-SQL,或者换句话说,您的 C# 与数据库交互的方法。 Go 是一个 Sql Server Managent Studio 关键字,它告诉 SQL 脚本作为单独的命令执行。因此脚本中的 SSMS 运行s 以 GO 分隔的批次。
您需要自行分离并 运行 批次,并告诉每个批次执行。或者,如果未生成脚本,我将它们存储为存储过程并将我的参数传递给它。
我有一个简单的 .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 的值似乎包含格式文本(return 个字符):
USE [master]\r\nGO\r\nCREATE DATABASE [NEW_DATABASE]\r\nGO\r\n
会不会是这个问题?
GO 关键字不是 T-SQL,或者换句话说,您的 C# 与数据库交互的方法。 Go 是一个 Sql Server Managent Studio 关键字,它告诉 SQL 脚本作为单独的命令执行。因此脚本中的 SSMS 运行s 以 GO 分隔的批次。
您需要自行分离并 运行 批次,并告诉每个批次执行。或者,如果未生成脚本,我将它们存储为存储过程并将我的参数传递给它。