9

Dapper を使用して SQL クエリを実行しようとしています。

use master
go

if exists (select name from sys.databases where name = N'TestDB')
drop database [TestDB]
go

create database [TestDB] on primary ( 
  name = 'TestDB_Data',
  filename = '$Path\TestDB_Data.mdf',
  size = 40MB,
  maxsize = 2GB,
  filegrowth = 20MB 
)

use [TestDB]
go

create table dbo.Posts
(
  Id int identity not null,
  Body nvarchar (max) null
);

私は次のようにDapperを使用しています:

using (SqlConnection connection = new SqlConnection(connectionString)) {
  connection.Open();
  connection.Execute(sqlQuery);
}

ただし、GO を使用するとエラーが発生します。

しかし、GO ステートメントを削除すると、テーブル TestDB が作成されていないため、投稿の作成時にエラーが発生します。

これを解決するために Dapper を使用する方法はありますか?

これは、SQL Server SDK を使用してのみ行うことができました。

4

3 に答える 3

10

GOはSQLステートメントではなく、単なるバッチセパレーターです。実際、名前を任意の名前に変更できます。

バッチセパレーター

Management Studioがこれを理解する方法は、SQLを解析することです。ステートメントをチャンク化できる簡単なパーサーを作成するのは簡単です。「GO」で文字列を分割し、各ステートメントをDapperに送信するだけです。

ただし、100%正確であるためには、洗練されたパーサーが必要です。

select '
GO ' GO from [GO] 
于 2012-08-21T23:22:14.820 に答える
4

Dapper はここでは役に立ちません。代わりに、SQL Server Management Objects を試して、あなたが言及したような大きな SQL コマンドを実行することをお勧めします。また、GO ステートメントをサポートしています。

ステップバイステップの手順については、このブログ投稿をご覧ください。

于 2012-08-20T02:09:05.740 に答える