2009-10-21 6 views
2

SQL Server 2008En utilisant SMO, toujours pas aller ... ConnectionContext.ExecuteNonQuery (script) ne peut pas comprendre "GO"

En utilisant toutes les références correctes j'ose dire:

System.Data.SqlClient; 
Microsoft.SqlServer.Management.Smo; 
Microsoft.SqlServer.Management.Common; 
Microsoft.SqlServer.Management.Sdk.Sfc; 

Tous les compiles sans erreurs.

J'ai dépouillé le code jusqu'à presque zéro pour faciliter le débogage.

Connexion au serveur correct et ainsi de suite.

Executing code suivant:

SqlConnection connection = new SqlConnection(sqlConnectionString); 
Server server = new Server(new ServerConnection(connection)); 
server.ConnectionContext.ExecuteNonQuery(sqlDBQuery); 

sqlDBQuery est une chaîne: USE [master] GO ALTER DATABASE [Cassiopeia] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [Cassiopeia] SET ANSI_NULLS OFF GO

Mais peu importe ce que "sqlDBQuery" est, je reçois toujours la même erreur, comme

syntaxe incorrecte à proximité de GO

.

J'étais dans la croyance que SMO prendrait soin de cela, quand je regarde mon ConnectionContext est dit BatchSeparator = « GO »

Si je retire ce GO est un départ ... pour ainsi dire, mais je vraiment besoin savoir pourquoi mon SMO ne fonctionne pas.

Partout où je regarde juste dit « utiliser SMO comme ça et vous êtes hors bien ». Eh bien ... ça ne marche pas pour moi.

Voir ce post par Jon Galloway pour référence: http://weblogs.asp.net/jgalloway/archive/2006/11/07/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-2D00-the-easy-way.aspx

Cordialement

Répondre

6

"GO" est pas le langage SQL

Il est un séparateur de lot utilisé par les outils clients comme SSMS (qui n'envoie pas « GO » au moteur de base de données)

SMO ne pas analyser le script en lots comme SSMS ferait, de sorte que le moteur de base de données renvoie une erreur.

Après commentaire:

"GO" doit être sur une ligne séparée par lui-même

est littéralement votre script ce (copier/coller à partir quand je "modifier" la question)

USE [master] GO ALTER DATABASE [Cassiopeia] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [Cassiopeia] SET ANSI_NULLS OFF GO 

ou bien formaté?

USE [master] 
GO 
ALTER DATABASE [Cassiopeia] SET ANSI_NULL_DEFAULT OFF 
GO 
ALTER DATABASE [Cassiopeia] SET ANSI_NULLS OFF 
GO 
+0

Merci pour la réponse, il est très vrai que "GO" n'est pas SQL mais j'essaie d'utiliser cette solution, et acheter tous les moyens que je ne peux pas comprendre pourquoi cela ne fonctionne pas pour moi. Voir Jon Galloways solution très appréciée: http://weblogs.asp.net/jgalloway/archive/2006/11/07/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-_2D00_-the-easy-way.aspx – tman

+0

Vous êtes sur place là-bas! Trouvé le problème il y a juste une heure! Je reformatais le texte pour l'ancienne solution utilisée (dépouillant le texte des signes d'échappement!) Trouvé lors de l'utilisation StreamReader pour lire le fichier au lieu de comme une ressource (formatage contourné). Oui je suis stupide. Merci pour votre effort, proche d'être une bouée de sauvetage! – tman

0

Erreur causée par un formatage incorrect du texte de requête. Assez embarrassant vraiment.

maintenant résolu, merci!

Questions connexes