2012-05-02 52 views
0

我用這個白皮書從MS參考沒有結果: http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx語法錯誤或根本

但是我得到一個錯誤,當我嘗試以下查詢:

command = new SqlCommand(
    "SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE" + 
    "XML.exist('//Root/ActiveRecord[" + s1 + 
    "= " + s2 + "]') = 1" 
    , connection); 

錯誤「

如果我刪除」XMLObject「後面的所有內容直到逗號,並且在DB中存在元素時返回某些內容,則能夠執行該命令。

我也很好奇我是否以正確的方式設置QUOTED_IDENTIFIER值。

在C#/ MSSQL中的任何示例項目/教程我可能會看看,也將不勝感激!

編輯: 對於任何人看到這一點,我也發現,使用存在的正確的方法是:

"...exist('/Root/ActiveRecord[" + s1 + 
    "= \"" + s2 + "\"]') = 1" 

沒有「唯一的數值比較工作

回答

0

我認爲你錯過了WHERE和012之間的空格:

command = new SqlCommand(
    "SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE " + // Note space 
    "XML.exist('//Root/ActiveRecord[" + s1 + 
    "= " + s2 + "]') = 1" 
    , connection); 
+0

感謝您修復了這個問題......我一直都很想學習XQuery,我不認爲這可能是一個簡單的錯誤! –

0

你應該避免建築SQL通過連接字符串是SQL注入漏洞你需要一個分號後ON您的列數據類型必須是xml或您必須將其轉換爲xml

+0

謝謝! 我的列是xml類型的,我已經檢查過其他地方的危險字符。 –