Dapper. Esegui la query con GO

dapper sql

Domanda

Sto cercando di usare Dapper per eseguire una query 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
);

Sto usando Dapper come segue:

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

Tuttavia, ricevo un errore durante l'utilizzo di GO.

Ma se rimuovo le istruzioni GO ricevo un errore durante la creazione di post perché la tabella TestDB non è stata creata.

C'è un modo per usare Dapper per risolvere questo?

Sono stato in grado di farlo solo utilizzando SQL Server SDK.

Risposta accettata

Dapper non può aiutarti qui. Invece, ti suggerirei di provare SQL Server Management Objects per eseguire comandi SQL di grandi dimensioni come quello che hai menzionato. E supporta le dichiarazioni GO.

Puoi controllare questo post sul blog per istruzioni dettagliate.


Risposta popolare

GO non è un'istruzione SQL, è semplicemente un separatore di batch, infatti è possibile rinominarlo in base a ciò che si desidera.

batch seperator

Il modo in cui Management Studio capisce questo è analizzando l'SQL. È facile scrivere un parser banale che può bloccare le affermazioni. Basta dividere la stringa su "GO" e inviare ogni dichiarazione a Dapper.

Tuttavia, per essere corretti al 100% è necessario un parser sofisticato .

select '
GO ' GO from [GO] 


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow