2016-03-27 21 views
0

Şöyle basit bir .sql dosyasına sahip değildir:hataları alır, ama SSMS koşarak

SSMS onu çalıştırmak
USE [master] 
    GO 

    CREATE DATABASE [NEW_DATABASE] 
    GO 

, iyi çalışıyor, NEW_DATABASE veritabanı oluşturuldu. Ancak, bu komutu C# programında gömülü bir kaynak olarak kullanarak çalıştırmaya çalışıyorum. Bu .sql dosyasının son sürümü çok daha karmaşık olacak, ancak şimdilik sadece bu basit betiği çalışmaya çalışıyorum. Ben şu var,

1) I added a resource file (named SqlFiles) to my project. 

2) I opened the resource file within VS and added a new file 
resource, "create.sql". 

3) I saved the resource file. 

Sonra benim kodunda: Ben programı çalıştırdığınızda

// If database doesn't exist, run the script to create it. 
if (dbExists == false) 
{ 
    using (var connection = new SqlConnection("Data Source=" + computerName + "\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True")) 
    { 
     connection.Open(); 
     var command = connection.CreateCommand(); 
     command.CommandText = SqlFiles.create; 
     command.ExecuteNonQuery(); 
    } 
} 

, aşağıdaki hatayı alıyorum İşte

ben uyguladığınız adımları şunlardır komut çalıştırıldığında: Ben belirtildiği gibi SSMS bu aynı dosyayı açmak ve çalıştırmak eğer

Incorrect syntax near 'GO'. 

Ancak, bu kel sorun olmadan ks.

ben hata ayıklama command değişkenin üzerine geldiğinizde, CommandText değeri içinde biçimlendirme metni göründüğünü fark yok

(daha doğrusu, karakterler dönüş):

USE [master]\r\nGO\r\nCREATE DATABASE [NEW_DATABASE]\r\nGO\r\n 

bu sorunu olabilir mi?

+1

SSMS aracılığıyla çalıştırdığınızda, Windows Kimlik Doğrulaması veya belirli bir SQL kullanıcı hesabı kullanıyor musunuz? – Lex

+0

@Lex Windows Kimlik Doğrulaması. – Kevin

+1

Sanırım orada yeni satır karakterleri hakkında haklısınız. Eğer bunları command.CommandText = SqlFiles.create.Replace ("\\ r \\ n", ""); 'gibi bir şey kullanarak çıkarırsanız çalışır mı? Belki de tek de \\ 'ile denemek? Açıkçası görünen bir şey önerirsem özür dilerim. – Lex

cevap

4

GO anahtar sözcüğü T-SQL veya başka bir deyişle, C# 'nun veritabanıyla nasıl etkileşim kurduğu yöntemi değildir. Go, SQL komut dosyasının ayrı komutlar olarak yürütülmesini söyleyen bir Sql Sunucu Yöneticisi Studio anahtar kelimedir. Bu yüzden SSMS, komut dosyasında GO'larla ayrılan gruplar halinde çalışır.

Grupları ayrı ayrı ayırmanız ve tek tek çalıştırmanız ve her birinin çalıştırılmasını söylemeniz gerekir. Alternatif olarak, komut üretilmezse, bunları saklı bir yordam olarak saklar ve argümanlarımı buna iletirim.

+0

Haklısın. Lex, yukarıdaki yorumlarda, SQL komut dosyalarında 'GO' ile ilgili son derece yararlı bir makaleye işaret etti. – Kevin