Linq to Sql ExecuteCommand для CREATE DATABASE - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть приложение ASP.NET MVC, и я использую LinqToSql для доступа к базе данных.

Я хочу создать базу данных из сценария SQL в моей СУБД (SQL Server Express).

Когда я запускаю свой сценарий без SQL Server Management Studio, он работает с тем же подключением пользователя, однако, когда я запускаю его из LinqToSql с ExecuteCommand, он выдает ошибки о том, что я не могу использовать операторы GO.Если я удаляю операторы GO и повторяю попытку, в первой строке пакета указывается CREATE SCHEMA

Поэтому, я запутался, есть ли другой (лучший) способ запуска сценария sql, который содержит операторы CREATE DATABASE и CREATE SCHEMA, из asp.net mvc без этих проблем.

Спасибо, 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 ]

2 голосов
/ 14 декабря 2010

Это работает для меня:

 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);
      }
    }
  }
0 голосов
/ 07 декабря 2010

GO не является допустимой командой T-SQL - это разделитель команд, используемый SQL Server Management Studio. Вы не можете использовать GO в сценариях SQL, которые хотите выполнить из своего собственного кода.

Что вам нужно сделать, это разбить этот скрипт на две части:

  • первый CREATE DATABASE скрипт, который создает базу данных (и, возможно, схему)
  • второй скрипт, который создаст таблицу

Вам нужно выполнить оба один за другим, используя вызов ExecuteCommand.

0 голосов
/ 07 декабря 2010

Должны ли эти задачи выполняться из скрипта? Вы можете использовать Объекты управления SQL Server , которые предоставляют программный доступ к задачам управления. например, создание базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...