2016-04-14 21 views
0

使用參數,即使我有這樣的SQL查詢:'。'附近的語法無效在C#

Select distinct 
    cols.referenced_entity_name 
from 
    sys.sql_expression_dependencies objs 
outer apply 
    sys.dm_sql_referenced_entities (OBJECT_SCHEMA_NAME(objs.referencing_id) + N'.' + object_name(objs.referencing_id), N'OBJECT') as cols 
where 
    objs.referencing_id = object_id('viewname') 

這將返回我的依賴關係的列表,給定視圖

這個查詢在SQL工作。然而,當我把它變成一個C#類這樣

Select distinct 
    cols.referenced_entity_name as depedency 
from 
    sys.sql_expression_dependencies objs 
outer apply 
    sys.dm_sql_referenced_entities (OBJECT_SCHEMA_NAME(objs.referencing_id) + [email protected] + object_name(objs.referencing_id), [email protected]) as cols 
where 
    objs.referencing_id = object_id(@view) 

與參數爲@period = .@object =對象和@view =視圖名,我得到一個異常

無效的語法附近「」 。

我原本沒有的 ''作爲一個參數,併發送它只是'。'但它也拒絕了(我逃脫了'如此'。'',以使得到的字符串只是'。')

這種類型的難題我能做些什麼來使查詢工作...正如我所說的,如果我只是在SQL Server Management Studio中運行它,它工作正常。

我打開替代查詢來獲取我相同的結果順便說一句,我從Determine table referenced in a view in SQL Server

此查詢並返回我所尋找的是一個返回的視圖相依查詢和我說工作在查詢分析器,但不能得到時通過SqlCommand對象在C#中通過了它的功能

編輯::

OK我挖成在查詢上面提到的觀點和我的生活中,我找不出爲什麼這個查詢不會給我同樣的結果

Select referenced_entity_name as dependancy from sys.sql_expression_dependencies where referencing_id = object_id('viewname') 

據我所知,它給了我一個更清晰的查詢相同的結果,但我不完全是系統視圖的專家。

誰能告訴我,如果他們認爲這應該給我相同的結果無誤?

因爲如果這樣做,它消除了N'的需要。這是造成我的悲痛試圖參數在C#

+2

'N - [object'是*不*有效語法,只需用'@ object',或更好,但只是''OBJECT''因爲它是恆定的。同一時期。 –

+0

即使我在@period參數前刪除了N,我仍然得到無效的語法'。' – Bastyon

+0

http:// stackoverflow。com/questions/2725548/sql-server-all-object-dependencies – MethodMan

回答

3

的解決方案是,你需要在查詢中使用@object,但是當你設置的參數在C#中,您可以定義類型:

System.Data.SqlDbType.NVarChar 

這將使它,所以你不必使用N前綴。

另一件需要注意的事情是,你想使用"."而不是'.',因爲它們是兩個不同的東西:字符串和字符。

+0

不會讓我編輯我的第一個評論,因爲某些原因,這裏是我的意思 在我目前使用的版本我參數化他們,我已經刪除了N,以便查詢是@period,它作爲cmd.Parameters.AddWithValue(para_name,parameter_values)設置到cmd對象中;我通過的價值很簡單。沒有引號 – Bastyon

+0

另外我試過用「。」它仍然在'。'附近返回相同的無效語法。 – Bastyon