我似乎无法执行使用DbCommand对象创建数据库的SQL。我究竟做错了什么?这是我的代码:
DbConnection connection; // initialized and opened elsewhere DbCommand cmd = connection.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery();
这是错误:
查询语法无效。,靠近术语’/’,第1行,第2列。说明:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。 异常详细信息:System.Data.EntitySqlException:查询语法无效。,靠近术语’/’,第1行,第2列。
查询语法无效。,靠近术语’/’,第1行,第2列。说明:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.Data.EntitySqlException:查询语法无效。,靠近术语’/’,第1行,第2列。
这是文件的第一部分。仅针对第一行中的注释引发异常:
/****** Object: Table [dbo].[User] Script Date: 10/08/2009 12:14:29 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[User]( [Id] [int] IDENTITY(1,1) NOT NULL, [FirstName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NULL, [EmailAddress] [nvarchar](100) NULL, CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
可以从SQL Management StudioExpress执行相同的SQL脚本(实际上,应用程序生成了该脚本!)。这只是VisualStudio自己的服务器资源管理器查询视图,而从我自己的代码看来似乎失败了。
您需要使用SQL管理类而不是普通的SqlCommand。 此页面显示了如何进行。 如果您尝试自己解析SQL,则总是会遗漏一些极端情况。例如,如果代码中的字符串包含带有前导和尾随回车符的单词“ GO”,该怎么办?
添加以下参考:
然后,您可以使用以下代码:
string connectionString, scriptText; SqlConnection sqlConnection = new SqlConnection(connectionString); ServerConnection svrConnection = new ServerConnection(sqlConnection); Server server = new Server(svrConnection); server.ConnectionContext.ExecuteNonQuery(scriptText);