scripts & SqlCommand
От: ydab  
Дата: 21.01.10 10:44
Оценка:
добрый день,

хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:


using (SqlConnection connection = new SqlConnection(sqlConnectionString))
{
    using (SqlCommand command = new SqlCommand(loadScript("db.sql"), connection))
    {
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}


сам скрипт выглядит так:


USE [master]
GO

/****** Object:  Database [LeoTestDB]    Script Date: 01/20/2010 13:47:32 ******/
CREATE DATABASE [LeoTestDB] ON  PRIMARY 
( NAME = N'LeoTestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'LeoTestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF 
GO


итп.

к сожелению это не работает.
как заставить работать?

заранее благодарен
ado.net sql
Re: scripts & SqlCommand
От: Аноним  
Дата: 21.01.10 11:13
Оценка:
Здравствуйте, ydab, Вы писали:

Y>добрый день,


Y>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:



Y>
Y>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>{
Y>    using (SqlCommand command = new SqlCommand(loadScript("db.sql"), connection))
Y>    {
Y>        command.Connection.Open();
Y>        command.ExecuteNonQuery();
Y>    }
Y>}
Y>


Y>сам скрипт выглядит так:



Y>
Y>USE [master]
Y>GO

Y>/****** Object:  Database [LeoTestDB]    Script Date: 01/20/2010 13:47:32 ******/
Y>CREATE DATABASE [LeoTestDB] ON  PRIMARY 
Y>( NAME = N'LeoTestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
Y> LOG ON 
Y>( NAME = N'LeoTestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
Y>GO

Y>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
Y>GO

Y>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
Y>begin
Y>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
Y>end
Y>GO

Y>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF 
Y>GO
Y>


Y>итп.


Y>к сожелению это не работает.

Y>как заставить работать?

Y>заранее благодарен


Надо немного модифицировать скрипт примерно вот так:

USE [master]

/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
CREATE DATABASE [LeoTestDB] ON PRIMARY
( NAME = N'LeoTestDB', FILENAME = N'd:\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'LeoTestDB_log', FILENAME = N'd:\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
end

ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF


А вызывать его на исполнение вот так:

using (SqlConnection cConnect = new SqlConnection("Data Source=server_name;Initial Catalog=master;Integrated Security=SSPI;"))
{
cConnect.Open();
using(StreamReader cStream = File.OpenText("d:\\sqlcommand.sql"))
{
string strCmd = cStream.ReadToEnd();

using(SqlCommand cCommand = new SqlCommand())
{
cCommand.CommandText = "[dbo].[sp_executesql]";
cCommand.Connection = cConnect;
cCommand.CommandType = CommandType.StoredProcedure;
cCommand.CommandTimeout = 0;
cCommand.Parameters.Add(new SqlParameter("@stmt", strCmd));
cCommand.ExecuteNonQuery();
}
}
}
Re[2]: scripts & SqlCommand
От: andrw  
Дата: 21.01.10 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ydab, Вы писали:


Y>>добрый день,


Y>>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:



Y>>
Y>>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>>{
Y>>    using (SqlCommand command = new SqlCommand(loadScript("db.sql"), connection))
Y>>    {
Y>>        command.Connection.Open();
Y>>        command.ExecuteNonQuery();
Y>>    }
Y>>}
Y>>


Y>>сам скрипт выглядит так:



Y>>
Y>>USE [master]
Y>>GO

Y>>/****** Object:  Database [LeoTestDB]    Script Date: 01/20/2010 13:47:32 ******/
Y>>CREATE DATABASE [LeoTestDB] ON  PRIMARY 
Y>>( NAME = N'LeoTestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
Y>> LOG ON 
Y>>( NAME = N'LeoTestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
Y>>GO

Y>>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
Y>>GO

Y>>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
Y>>begin
Y>>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
Y>>end
Y>>GO

Y>>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF 
Y>>GO
Y>>


Y>>итп.


Y>>к сожелению это не работает.

Y>>как заставить работать?

Y>>заранее благодарен


А>Надо немного модифицировать скрипт примерно вот так:


А>USE [master]


А>/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/

А>CREATE DATABASE [LeoTestDB] ON PRIMARY
А>( NAME = N'LeoTestDB', FILENAME = N'd:\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
А> LOG ON
А>( NAME = N'LeoTestDB_log', FILENAME = N'd:\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

А>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100


А>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))

А>begin
А>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
А>end

А>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF



А>А вызывать его на исполнение вот так:


А>using (SqlConnection cConnect = new SqlConnection("Data Source=server_name;Initial Catalog=master;Integrated Security=SSPI;"))

А> {
А> cConnect.Open();
А> using(StreamReader cStream = File.OpenText("d:\\sqlcommand.sql"))
А> {
А> string strCmd = cStream.ReadToEnd();

А> using(SqlCommand cCommand = new SqlCommand())

А> {
А> cCommand.CommandText = "[dbo].[sp_executesql]";
А> cCommand.Connection = cConnect;
А> cCommand.CommandType = CommandType.StoredProcedure;
А> cCommand.CommandTimeout = 0;
А> cCommand.Parameters.Add(new SqlParameter("@stmt", strCmd));
А> cCommand.ExecuteNonQuery();
А> }
А> }
А>


забыл о разметке прошу прощения:

А>USE [master]

А>/****** Object:  Database [LeoTestDB]    Script Date: 01/20/2010 13:47:32 ******/
А>CREATE DATABASE [LeoTestDB] ON  PRIMARY 
А>( NAME = N'LeoTestDB', FILENAME = N'd:\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
А> LOG ON 
А>( NAME = N'LeoTestDB_log', FILENAME = N'd:\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

А>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100

А>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
А>begin
А>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
А>end

А>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF



using (SqlConnection cConnect = new SqlConnection("Data Source=igw020738\\sqlexpresstest;Initial Catalog=master;Integrated Security=SSPI;"))
            {
                cConnect.Open();
                using(StreamReader cStream = File.OpenText("d:\\sqlcommand.sql"))
                {
                    string strCmd = cStream.ReadToEnd();

                    using(SqlCommand cCommand = new SqlCommand())
                    {
                        cCommand.CommandText = "[dbo].[sp_executesql]";
                        cCommand.Connection = cConnect;
                        cCommand.CommandType = CommandType.StoredProcedure;
                        cCommand.CommandTimeout = 0;
                        cCommand.Parameters.Add(new SqlParameter("@stmt", strCmd));
                        cCommand.ExecuteNonQuery();
                    }
                }
            }
Re: scripts & SqlCommand
От: _FRED_ Черногория
Дата: 21.01.10 11:23
Оценка:
Здравствуйте, ydab, Вы писали:

Y>добрый день,

Y>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:
Y>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>{
Y>    using (SqlCommand command = new SqlCommand(loadScript("db.sql"), connection))
Y>    {
Y>        command.Connection.Open();
Y>        command.ExecuteNonQuery();
Y>    }
Y>}

Y>к сожелению это не работает.
Y>как заставить работать?

А зачем? Чем не подходит объектная модель самого сиквела (здесь)?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: scripts & SqlCommand
От: Lloyd Россия  
Дата: 21.01.10 11:40
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А зачем? Чем не подходит объектная модель самого сиквела (здесь)?


Для этого как минимум нужно, чтобы SMO была инсталирована.
Re[3]: scripts & SqlCommand
От: _FRED_ Черногория
Дата: 21.01.10 11:48
Оценка:
Здравствуйте, Lloyd, Вы писали:

_FR>>А зачем? Чем не подходит объектная модель самого сиквела (здесь)?


L>Для этого как минимум нужно, чтобы SMO была инсталирована.


Точно! Tip of the Day – SQL Server Client tools.
Help will always be given at Hogwarts to those who ask for it.
Re: scripts & SqlCommand
От: vmpire Россия  
Дата: 21.01.10 11:49
Оценка:
Здравствуйте, ydab, Вы писали:

Y>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:


Y>
Y>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>{
Y>    using (SqlCommand command = new SqlCommand(loadScript("db.sql"), connection))
Y>    {
Y>        command.Connection.Open();
Y>        command.ExecuteNonQuery();
Y>    }
Y>}
Y>


Y>к сожелению это не работает.

Y>как заставить работать?
Убрать GO. Это не команда TSQL.
Или разбивать текст на куски по GO и выполнять частями.
Re[4]: scripts & SqlCommand
От: _FRED_ Черногория
Дата: 21.01.10 11:50
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>>>А зачем? Чем не подходит объектная модель самого сиквела (здесь)?

L>>Для этого как минимум нужно, чтобы SMO была инсталирована.
_FR>Точно! Tip of the Day – SQL Server Client tools.

+ не забываем Licensing SQL Server Client Tools.
Help will always be given at Hogwarts to those who ask for it.
Re: scripts & SqlCommand
От: Danchik Украина  
Дата: 21.01.10 11:57
Оценка:
Здравствуйте, ydab, Вы писали:

[Skip]

Y>к сожелению это не работает.

Y>как заставить работать?

Y>заранее благодарен


Загрузить файл в память, порезать его по слову GO
И запускать эти куски по порядку
Re[2]: scripts & SqlCommand
От: Lloyd Россия  
Дата: 21.01.10 11:59
Оценка:
Здравствуйте, vmpire, Вы писали:

Y>>к сожелению это не работает.

Y>>как заставить работать?
V>Убрать GO. Это не команда TSQL.

Это не всегда сработает.

V>Или разбивать текст на куски по GO и выполнять частями.


Это не так просто. Нужно уметь отличать GO как разделитель от GO как часть литерала или части идетификатора...
Re[3]: scripts & SqlCommand
От: _FRED_ Черногория
Дата: 21.01.10 12:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

V>>Или разбивать текст на куски по GO и выполнять частями.


L>Это не так просто. Нужно уметь отличать GO как разделитель от GO как часть литерала или части идетификатора...


GO (Transact-SQL)

A Transact-SQL statement cannot occupy the same line as a GO command. However, the line can contain comments.


Ничего сложного. Достаточно отпарсить коментарии да учесть "[count]".

Но вот вроде бы действительно не все команды можно выполнять через SqlCommand, но на вскидку не вспомню, с чём именно может быть засада.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: scripts & SqlCommand
От: Lloyd Россия  
Дата: 21.01.10 12:14
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>GO (Transact-SQL)


_FR>

_FR>A Transact-SQL statement cannot occupy the same line as a GO command. However, the line can contain comments.


_FR>Ничего сложного. Достаточно отпарсить коментарии да учесть "[count]".


Это tsql не может идти в той же строчке, что и GO, а GO сам по себе вполне может быть внутри tsql-я:
PRINT '
--
GO
--
'
Re[5]: scripts & SqlCommand
От: _FRED_ Черногория
Дата: 21.01.10 12:54
Оценка:
Здравствуйте, Lloyd, Вы писали:

_FR>>Ничего сложного. Достаточно отпарсить коментарии да учесть "[count]".


L>Это tsql не может идти в той же строчке, что и GO, а GO сам по себе вполне может быть внутри tsql-я:

L>PRINT '
L>--
L>GO
L>--
L>'


Ты уверен, что это выполнится? Мне, к сожалению, сейчас негде проверить…
Help will always be given at Hogwarts to those who ask for it.
Re[6]: scripts & SqlCommand
От: Lloyd Россия  
Дата: 21.01.10 13:03
Оценка: +1
Здравствуйте, _FRED_, Вы писали:

L>>Это tsql не может идти в той же строчке, что и GO, а GO сам по себе вполне может быть внутри tsql-я:

_FR>
L>>PRINT '
L>>--
L>>GO
L>>--
L>>'
_FR>


_FR>Ты уверен, что это выполнится? Мне, к сожалению, сейчас негде проверить…


Я проверил, прежде чем постить. Вывод такой:

--

GO

--

Так что, увы, задачка не такая простая.
Re[7]: scripts & SqlCommand
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.01.10 13:08
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Я проверил, прежде чем постить. Вывод такой:

L>

L>--

L>GO

L>--

L>Так что, увы, задачка не такая простая.

Есть ли практический смысл решать задачу в постановке, учитывающей такие случаи?
Re[8]: scripts & SqlCommand
От: Lloyd Россия  
Дата: 21.01.10 13:11
Оценка:
Здравствуйте, samius, Вы писали:

S>Есть ли практический смысл решать задачу в постановке, учитывающей такие случаи?


Об этом лучше спросить топикстартера.
Re[3]: scripts & SqlCommand
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.01.10 10:07
Оценка:
Здравствуйте, andrw, Вы писали:

А еще ты забыл убрать лишнее цитирование.
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.