Ответ 1
Посмотрите
У меня есть sql script для создания новой базы данных, которую я должен создать, когда наш продукт установлен. Для этого мне нужно запустить script с помощью С#. DB - это SQL-сервер 2005 Express. Помощь Plz....
sql script выглядит следующим образом:
USE [master]
GO
/****** Object: Database [Jai] Script Date: 02/12/2010 11:01:25 ******/
CREATE DATABASE [Jai] ON PRIMARY
( NAME = N'Jai', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Jai.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'Jai_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Jai_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'Jai', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Jai].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [Jai] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [Jai] SET ANSI_NULLS OFF
GO
ALTER DATABASE [Jai] SET ANSI_PADDING OFF
GO
ALTER DATABASE [Jai] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [Jai] SET ARITHABORT OFF
GO
ALTER DATABASE [Jai] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [Jai] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [Jai] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [Jai] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [Jai] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [Jai] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [Jai] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [Jai] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [Jai] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [Jai] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [Jai] SET ENABLE_BROKER
GO
ALTER DATABASE [Jai] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [Jai] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [Jai] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [Jai] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [Jai] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [Jai] SET READ_WRITE
GO
ALTER DATABASE [Jai] SET RECOVERY FULL
GO
ALTER DATABASE [Jai] SET MULTI_USER
GO
ALTER DATABASE [Jai] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [Jai] SET DB_CHAINING OFF
Посмотрите
Здесь - сообщение из MSDN, объясняющее, как это сделать с помощью SMO:
using System.Data.SqlClient;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string sqlConnectionString = "Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=True";
FileInfo file = new FileInfo("C:\\myscript.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(sqlConnectionString);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
}
}
}
Когда мне нужно запускать sql-скрипты, содержащие инструкции GO, я обычно читаю весь файл в строку и разбиваю его на строковый массив, используя GO в качестве разделителя.
Затем я подключаюсь к базе данных и запускаю каждую инструкцию по порядку.
Это довольно легко и работает хорошо. Просто убедитесь, что ваше соединение с базой данных открыто во время выполнения всех операторов. Также вы можете запустить их все в транзакции.