Zen'o_179 Ответов: 1

Как создать базу данных с помощью скрипта


Привет,
Я написал небольшое приложение в VS 2010 с помощью файла .mdf shopperDB.mdf. Я создал установочный файл в расширенном установщике и включил все предварительные условия, включая sql server express.
Установка выполняется нормально на виртуальной машине Windows XP вплоть до SQL server. Однако при запросе базы данных появляется сообщение об ошибке:

[SQLExecDirect]{SQL_ERROR}:{SQL_STATE:42000}[Microsoft][ODBC SQL Server Driver][SQL Server]Directory lookup for the file "C:\Program Files\SHOPPER\shopperDB.mdf" failed with the operating system error 2(The file specified cannot be found)


как я могу решить эту проблему, пожалуйста

Что я уже пробовал:

The Database generation script:

    -- Inline SQL script
    USE [master]
    GO
    /****** Object:  Database [G:\DEPLOY PRACTICE\SHOPPER\SHOPPER\SHOPPERDB.MDF]        Script Date: 16/12/2017 20:18:17 ******/
    IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'C:\Program Files\SHOPPER\SHOPPERDB.MDF')
    BEGIN
    CREATE DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] ON  PRIMARY 
    ( NAME = N'shopperDB', FILENAME = N'C:\Program Files\SHOPPER\shopperDB.mdf' , SIZE = 2304KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
     LOG ON 
    ( NAME = N'shopperDB_log', FILENAME = N'C:\Program Files\SHOPPER\shopperDB_log.ldf' , SIZE = 576KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    END
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET COMPATIBILITY_LEVEL =     100
    GO
    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC [C:\Program Files\SHOPPER\SHOPPERDB.MDF].[dbo].[sp_fulltext_database] @action = 'enable'
    end
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET ANSI_NULL_DEFAULT OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET ANSI_NULLS OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET ANSI_PADDING OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET ANSI_WARNINGS OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET ARITHABORT OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET AUTO_CLOSE ON 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET AUTO_SHRINK ON 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET AUTO_UPDATE_STATISTICS     ON 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET CURSOR_CLOSE_ON_COMMIT OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET CURSOR_DEFAULT  GLOBAL 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET   CONCAT_NULL_YIELDS_NULL OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET NUMERIC_ROUNDABORT OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET QUOTED_IDENTIFIER OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET RECURSIVE_TRIGGERS OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET  DISABLE_BROKER 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET DATE_CORRELATION_OPTIMIZATION OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET TRUSTWORTHY OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET ALLOW_SNAPSHOT_ISOLATION OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET PARAMETERIZATION SIMPLE 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET READ_COMMITTED_SNAPSHOT OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET HONOR_BROKER_PRIORITY OFF 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET RECOVERY SIMPLE 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET  MULTI_USER 
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET PAGE_VERIFY CHECKSUM  
    GO
    ALTER DATABASE [C:\Program Files\SHOPPER\SHOPPERDB.MDF] SET DB_CHAINING OFF 
    GO
    USE [C:\"Program Files"\"FUBUH GROUP"\SHOPPER\SHOPPERDB.MDF]
    GO
    /****** Object:  Table [dbo].[bits_available]    Script Date: 16/12/2017 20:18:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bits_available]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[bits_available](
............
............
............

[no name]

Я не читал внимательно, но одна вещь, которая привлекает мое внимание, - это путь к вашей базе данных". C:\Program файлы\SHOPPER\". Начиная с XP (если я правильно помню), больше не разрешается (без хитростей) иметь такие файлы в папке "Program Files".

PIEBALDconsult

Да, это, конечно, не кажется лучшим местом; "ProgramData" может быть лучше.

1 Ответов

Рейтинг:
4

OriginalGriff

Есть пара вещей, которые вы должны изменить здесь. SQL Server должен быть свободен в указании имени файла - это плохая идея, чтобы попытаться указать его самостоятельно, особенно когда вы пытаетесь поместить файл БД в Program files.
Это связано с тем, что программные файлы (и папки под ними) обычно доступны только для чтения - в качестве меры безопасности, - поэтому для записи в них требуется доступ администратора. Разрешение Sql хранить его в своей собственной области данных позволяет обойти это.

Кроме того, обычно в процессе разработки приложение выполняется только на том же компьютере, что и экземпляр SQL Server, и если вы всегда ожидаете этого, то вы уничтожили смысл использования серверной системы и установили огромный и сложный пакет без всякой уважительной причины. Так что ваш фиксированный путь также вряд ли будет работать в любом случае.

Подумайте о том, что вы делаете: если вам нужен многопользовательский доступ (и, следовательно, серверная система), то пусть Sql обрабатывает, где хранится БД. Если вы этого не сделаете, то не используйте SQL Server - используйте SqLite или даже Access и храните свою БД в разумном месте: Где я должен хранить свои данные?[^]


Zen'o_179

Привет,
Я хочу узнать у вас, какие изменения можно внести в сценарий, чтобы позволить SQL server создать базу данных в выбранном им месте?