【问题标题】:How to run a sql script using C# [duplicate]如何使用 C# 运行 sql 脚本 [重复]
【发布时间】:2010-02-12 07:48:13
【问题描述】:

我有一个 sql 脚本来创建一个新数据库,我需要在安装我们的产品时创建它。为此,我需要使用 c# 触发脚本。 DB 是 sql-server 2005 express。请帮忙....

sql脚本如下:

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 

【问题讨论】:

  • 老兄,像前面提到的那样使用 SMO 并完成它。

标签: c# .net sql-server sql-server-2005


【解决方案1】:

Here 是 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);
        }
    }
}

【讨论】:

  • 我认为这会扼杀 GO 语句
  • 应该指出FileInfo.OpenText方法返回一个StreamReader。你需要确保你正在处理它。
  • @RuneGrimstad GO 不会窒息。这是使用 SQL Server 管理程序集而不是标准 SqlCommand。
  • 这需要引用可以从 SQL Server 文件夹 C:\Program Files\Microsoft SQL Server\XXXX\SDK\Assemblies 中找到的 64 位版本的 DLL。欲了解更多信息,请参阅:stackoverflow.com/questions/3879987/…
【解决方案2】:

当我需要运行包含 GO 语句的 sql 脚本时,我通常会将整个文件读入一个字符串,然后使用 GO 作为分隔符将其拆分为一个字符串数组。

然后我连接到数据库并按顺序运行每个语句。

这很容易而且效果很好。只需确保在运行所有语句时保持数据库连接打开。你也可以考虑在一个事务中运行它们。

【讨论】:

  • 整个过程耗时又慢?
  • MSSQL 事务“足够”回滚alter table 等吗?
  • @HotTester:我已经以这种方式运行了一些大型脚本,它们的运行速度或多或少与从 SQL 管理控制台运行它们一样快。
  • @Jørn:不,我不认为您可以更改事务中的表。
  • 只是祈祷你没有任何包含单词“go”的字符串数据!
【解决方案3】:

【讨论】:

  • 但是在你给出的链接中,它清楚地表明它只有在脚本没有 GO 语句时才有效......我的脚本是用于创建新数据库......它包含多个 GO..
  • 也看看第二个链接,这是在 SO 上被问到的,第三个链接也提到了解决方法。
  • 如果“GO”是个问题,您可以解析 .SQL 文件并通过 ExecuteNonQuery 运行每个部分。
  • 在这种情况下,在“GO”上拆分脚本并运行单个查询所需的额外时间与有效创建所有这些对象所需的时间相比将是如此之少......
  • @hottester:您显然误解了您所读(或没有)的内容。 SMO 将执行您的 DDL 脚本。
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2010-09-17
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多