Comment exécuter SQL avec des commentaires et des instructions GO en utilisant SqlConnection?
Je n'arrive pas à exécuter SQL qui crée une base de données à l'aide d'un DbCommand objet. Ce que je fais mal? Voici mon code:
DbConnection connection; //initialized and opened elsewhere
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
Voici l'erreur:
La syntaxe de la requête n'est pas valide., près de
terme '/', à la ligne 1, colonne 2.
Description: Une exception non gérée
s'est produite pendant l'exécution de la
demande web actuelle. Veuillez passer en revue les
trace de la pile pour plus d'informations sur
l'erreur et où il trouve son origine dans
le code.Détails De L'Exception:
Système.Les données.EntitySqlException: L'
la syntaxe de la requête n'est pas valide., court terme
'/', à la ligne 1, colonne 2.
Voici la première partie du fichier. L'exception est levée, concernant seulement les commentaires sur la première ligne:
/****** Object: Table [dbo].[User] Script Date: 10/08/2009 12:14:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[EmailAddress] [nvarchar](100) NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Ce même script SQL s'exécute seulement beaux à partir de SQL server Management Studio Express (en fait, cette application a généré ce script!). C'est juste Visual Studio est propre Serveur de l'Explorateur de vue de requête et de ma propre code qui semble échouer.
source d'informationauteur Andrew Arnott
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le SQL de gestion des classes à la place de l'SqlCommand. Cette page vous montre comment le faire. Si vous essayez d'analyser le SQL vous-même, puis il y aura toujours des cas limites que vous manquez. Par exemple, si une chaîne de caractères dans le code contient le mot "ALLER" avec attaque et de fuite des retours chariot?
Ajouter ces références:
Alors vous pouvez utiliser ce code:
Voici un extrait de code que je posté sur mon blog il y a quelques temps qui peut résoudre ce problème:
Il divise le script SQL en plusieurs commandes et exécute chacun d'eux. J'utilise régulièrement ce pour configurer des bases de données d'essai avec des scripts SQL générés.
Je trouve étrange que vous obtenez une EntitySqlException ...
Une autre solution que vous pouvez choisir, est d'exécuter ce script via la ligne de commande osql outil.
Vous pouvez créer un Système.Diagnostics.Instance de processus, et l'utilisation de ce processus d'appel osql qui exécute le script.
dans SQL Server, vous pouvez enchaîner autant de requêtes que vous voulez avec un simple espace comme séparateur, mais pour cela vous devez supprimer le "GO".
exemple :