'。'附近的语法无效在C#

问题描述:

使用参数,即使我有这样的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

的解决方案是,你需要在查询中使用@object,但是当你设置的参数在C#中,您可以定义类型:

System.Data.SqlDbType.NVarChar 

这将使它,所以你不必使用N前缀。

另一件需要注意的事情是,你想使用"."而不是'.',因为它们是两个不同的东西:字符串和字符。

+0

不会让我编辑我的第一个评论,因为某些原因,这里是我的意思 在我目前使用的版本我参数化他们,我已经删除了N,以便查询是@period,它作为cmd.Parameters.AddWithValue(para_name,parameter_values)设置到cmd对象中;我通过的价值很简单。没有引号 – Bastyon

+0

另外我试过用“。”它仍然在'。'附近返回相同的无效语法。 – Bastyon