2012-03-06 9 views
0

これは私がエラーにCreateTableCommand.ExecuteNonQuery()でエラーが発生しました。

CreateTableCommand.CommandText = "BACKUP DATABASE Test" + 
          "TO DISK = 'C:\backup\t1.bak'" + 
           "WITH " + 
          "NOFORMAT, " + 
          "COMPRESSION," + 
          "NOINIT, " + 
          "NAME = N't1-Full Database Backup'," + 
          "SKIP, " + 
           "STATS = 10;"; 

を取得し、エラーがあるmがするクエリです「『DISK』の近くに不適切な構文。」 しかし、私は、MS SQL Server 2008のその作業罰金をクエリの実行を実行しますが、私は私のC#アプリケーションにそれを使用しようとすると、エラーを与えた場合plsは

+0

コードを再フォーマットしました。書式設定機能を使用してみてください。あなたのようなエラーはかなり明らかになっています。さらに、読むのがはるかに簡単です。 –

答えて

1

Test後に別のスペースを追加します。私を助けて、あなたのSQLを... TestTO DISK ...に構築されています。

string line2 = "BACKUP DATABASE Test "; 

Onotsが指摘したように、あなたも適切にいくつかの文字をエスケープする必要があります(それ自体\\は、エスケープシーケンスを導入しては\\としてエスケープされます):

string line2 = "TO DISK = \'C:\\backup\\t1.bak\'"; 

は詳細についてもMSDN: string (C# Reference)参照してください。 SQL文については

+1

また、文字列の\はエスケープ文字として扱われます。 \ bと\ tはおそらく彼が望むものではありません。 – Onots

+0

乾杯仲間本当に仕事と私も\\おかげで使用することを忘れていますが、今私はSQL Serverの管理スタジオから1,186キロバイトのサイズのファイルを作成すると、このコードを使用するときに別の問題がC#でファイルサイズが11,853kbの場合は、どうして私に教えてください。 –

+0

申し訳ありませんが、わかりません。あなたは多分新しい問題として尋ねるべきである。なぜなら、それはSQLの問題かもしれないし、それを見つけて答えるほうが簡単かもしれないからだ。:) –

1

、それは全体のクエリではなく、連結フラグメントのためVerbatim string literalを使用する方が簡単です。例えば。

CreateTableCommand.CommandText = @" 
BACKUP DATABASE Test 
TO DISK = 'C:\backup\t1.bak' 
WITH 
NOFORMAT, 
COMPRESSION, 
NOINIT, 
NAME = N't1-Full Database Backup', 
SKIP, 
STATS = 10; 
";