Linq to Sql ExecuteCommand for CREATE DATABASE

时间:2010-12-07 01:42:48

标签: database linq-to-sql ado.net

我有一个ASP.NET MVC应用程序,我使用LinqToSql进行数据库访问。

我想从SQL脚本创建一个数据库到我的DBMS(SQL Server Express)。

当我运行我的脚本时没有SQL Server Management Studio它使用相同的用户连接,但是,当我使用ExecuteCommand从LinqToSql运行它时,它确实给出了我不能使用GO语句的错误。如果我删除GO语句并再试一次,则表示CREATE SCHEMA应该是批处理的第一行。

因此,我很困惑,是否还有其他(更好的)运行sql脚本的方法,它包含来自asp.net mvc的CREATE DATABASE和CREATE SCHEMA语句,没有这些问题。

谢谢, cas sakal

以下是脚本的内容;

USE [master]
GO
CREATE DATABASE [TESTDB]
CREATE SCHEMA [base] AUTHORIZATION [dbo]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [base].[TestTable](
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[IsActive] [bit] NOT NULL,
 CONSTRAINT [PK_TestTable] 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

3 个答案:

答案 0 :(得分:2)

这对我有用:

 using (var db = CreateContext()) {
    if (db.DatabaseExists())
      db.DeleteDatabase();
    db.CreateDatabase();
    using (var sr = new StreamReader("prepareDatabase.sql")) {
      var commands = sr.ReadToEnd().Split(new string[] {"GO\r"}, System.StringSplitOptions.RemoveEmptyEntries);
      foreach (var cmd in commands) {
        db.ExecuteCommand(cmd);
      }
    }
  }

答案 1 :(得分:0)

这些任务是否必须从脚本执行?您可以使用SQL Server Management Objectsprogrammatic访问管理任务。例如creating a database

答案 2 :(得分:0)

GO不是有效的T-SQL命令 - 它是SQL Server Management Studio使用的命令分隔符。您不能在要使用自己的代码执行的SQL脚本中使用GO

您需要做的是将该脚本分成两部分:

  • 创建数据库(可能是架构)的第一个CREATE DATABASE脚本
  • 将创建表的第二个脚本

您需要使用ExecuteCommand调用一个接一个地执行。