Wie zum ausführen von SQL mit Kommentaren und GO-Anweisungen mithilfe der SqlConnection?
Ich kann nicht scheinen, um SQL ausführen, erstellt eine Datenbank mit dem DbCommand-Objekt. Was mache ich falsch? Hier ist mein code:
DbConnection connection; //initialized and opened elsewhere
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
Hier der Fehler:
Die Abfrage-syntax ist nicht gültig., in der Nähe
term '/', Zeile 1, Spalte 2.
Beschreibung: Eine nicht behandelte Ausnahme
ist aufgetreten während der Ausführung der
aktuellen web-Anfrage. Bitte überprüfen Sie die
Stapelüberwachung für weitere Informationen über
die Fehler und wo Sie Ihren Ursprung in
die code.Exception Details:
System.Daten.EntitySqlException:
Abfrage-syntax ist nicht gültig., in der Nähe von Begriff
'/', Zeile 1, Spalte 2.
Hier ist der erste Teil der Datei. Die Ausnahme geworfen wird, in Bezug auf nur die Kommentare auf die erste Zeile:
/****** 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
Diese gleichen SQL-script führt nur Geldstrafe von SQL Management Studio Express (in der Tat, die app generiert dieses Skript!). Es ist nur Visual Studio Server-Explorer query-Sicht und aus meinem eigenen code, scheint zu scheitern.
Mögliche Duplikate von Führen Sie eine große SQL-Skript (mit GO-Befehle)
InformationsquelleAutor Andrew Arnott | 2009-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie das SQL-management-Klassen statt der normalen SqlCommand. Diese Seite zeigt Ihnen, wie es zu tun. Wenn Sie versuchen, analysieren die SQL-selbst dann wird es immer Grenzfälle, die Sie vermissen. Was zum Beispiel, wenn ein string innerhalb des Codes enthält das Wort "GEHEN" mit führende und nachfolgende Zeilenumbrüche?
Diese Verweise hinzufügen:
Dann können Sie diesen code verwenden:
Microsoft.SqlServer.Management.Sdk.Sfc
assembly zu referenzieren, aber es stellte sich heraus, es war nicht notwendig, sowieso.InformationsquelleAutor David
Hier ist ein code-snippet, dass ich gepostet auf meinem blog vor einiger Zeit, kann dieses problem lösen:
Er teilt sich das SQL-Skript in separate Befehle und führt jede von Ihnen. Ich regelmäßig verwenden diese zum einrichten der test-Datenbanken mit den generierten SQL-Skripts.
Ich denke, dass es kann werden, dass es sich tatsächlich beschwert sich über die vollständige Erklärung, was passiert, beginnen mit dem Kommentar. Nicht sicher ist allerdings, so habe ich den editierten text weniger sicher, ob es eine Lösung bietet oder nicht.
die GEHEN batch-seperator ist gültig surronded durch weißen Raum, zumindest in SMS-Nachrichten für SQL Server 2005.
nicht mehr brauchen, weil es in
using
- AnweisungFunktioniert wie ein Charme, auch mit komplexen Dingen
InformationsquelleAutor Fredrik Mörk
Finde ich es seltsam, dass Sie immer ein EntitySqlException ...
Andere Lösung, die Sie wählen können, ist das Skript über den Befehl osql-line tool.
Sie könnten ein System schaffen.Diagnostik.Prozess-Instanz, und mit diesem Prozess zu nennen, osql, die wiederum führt das script aus.
InformationsquelleAutor Frederik Gheysels
in SQL Server können Sie verketten, so viele Abfragen wie Sie wollen mit einem einfachen Leerzeichen als Trennzeichen, sondern für die Sie brauchen, um die zu entfernen "GEHEN".
Beispiel :
InformationsquelleAutor Luqe