2016-03-27 4 views
0

ん、NEW_DATABASEをのC#から組み込みSQLファイルを実行すると、エラーを取得しますが、SSMSから実行すると、私はこのようになりますシンプルな.sqlファイルはありませ

USE [master] 
    GO 

    CREATE DATABASE [NEW_DATABASE] 
    GO 

私はSSMSからそれを実行すると、それが正常に動作しますデータベースが作成されます。しかし、私はC#プログラムの埋め込みリソースとしてこのコマンドを使用してこのコマンドを実行しようとしています。この.sqlファイルの最終版はもっと複雑になりますが、今はこの単純なスクリプトを動作させようとしています。ここで

私が撮影した手順は次のとおりです。

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. 

をその後は、私のコードでは、私は次のようしている:私はプログラムを実行すると

// 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(); 
    } 
} 

、私は次のエラーを取得しますコマンドが実行されたとき:

しかし、私が述べたように、私はこの同じファイルをSSMSで開いて実行するとwor問題なし。

私は(むしろ、文字を返す)私はデバッグにcommand変数にカーソルを合わせると、CommandTextをの値はそれでテキストの書式を設定したように見えることがわかります:

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

が、これはこの問題のだろうか?

+1

SSMS経由で実行する場合、Windows認証または特定のSQLユーザーアカウントを使用していますか? – Lex

+0

@Lex Windows認証。 – Kevin

+1

私はそこに改行文字が正しいと思います。 'command.CommandText = SqlFiles.create.Replace(" \\ r \\ n "、" ");'のようなものを使ってそれらを取り除くとうまくいくのですか?たぶん、単一の '\\'でも試してみてください。明白なことを示唆している場合は、私のお詫び申し上げます。 – Lex

答えて

4

GOキーワードは、T-SQLではなく、言い換えれば、C#がデータベースとやり取りする方法です。 Goは、SQLスクリプトが別のコマンドとして実行されるように指示するSql Server Managent Studioのキーワードです。だから、SSMSは、GOによって分離されたバッチでスクリプトで実行されます。

バッチを個別に個別に実行して実行し、それぞれに実行を指示する必要があります。また、スクリプトが生成されない場合は、ストアドプロシージャとして保存し、引数を渡します。

+0

そうです。上記のコメントの中で、Lexは、SQLスクリプトの中で 'GO'を扱う際の非常に有用な記事を指摘しました。 – Kevin

関連する問題