2013-06-21 97 views
-2

我試圖用C#和SQL命令從表到一個文本文件中保存的一些值SQL命令來保存表爲文本文件

sql.connection.Open(); 
sql.ex = new SqlCommand("EXEC xp_cmdshell 'bcp "SELECT * FROM SRO_VT_SHARD.._RefPackageItem" queryout "textBox1.Text" -T -c '",sql.connection); 
sql.ex.ExecuteNonQuery(); 
sql.connection.Close(); 

我這樣做,到我的C#API,但我不不知道如何解決SqlCommand文本中的錯誤?任何人都可以提供所需的修復? http://prntscr.com/1b5b2b

+1

這個錯誤究竟是什麼? –

+1

好吧,它在第二行下放一條紅線 –

+1

當你試圖執行它時,它會拋出什麼錯誤?如果你將鼠標懸停在帶下劃線的文字上,它是否會給你一個探索?什麼更具體? –

回答

3

您將bcp命令所需的雙引號與用於從文本框變量分隔命令所需的雙引號寬鬆混合。而且,正如你所看到的,VS的語法檢查器使用紅色的曲線來告訴你它並不滿意。

放置一個反斜槓在所需BCP命令引號的前面加一個+運算符來連接文本框的字符串值到你的命令的剩餘部分

sql.ex = new SqlCommand("EXEC xp_cmdshell 'bcp \"SELECT * FROM SRO_VT_SHARD.._RefPackageItem\" queryout " + 
     textBox1.Text + " -T -c '",sql.connection); 

我還要說,字符串連接構建Sql命令是非常危險的做法。
當使用普通命令查詢和/或更新數據時,我建議絕對避免字符串連接,因爲可能會暴露給Sql Injections。在這種情況下,我不確定是否可以使用TextBox1的內容裝入Sql Injection命令。

0
char b = '"'; 
string a = string.Format("EXEC xp_cmdshell 'bcp {0}SELECT * FROM SRO_VT_SHARD.._RefPackageItem{0} queryout " + textBox1.Text + " -T -c '",b); 
+3

如果你使用的是string.Format,爲什麼還要用'+'? –