Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c更改查询中的SQL表/列名#_C#_Sql_Parsing_Object_Graph - Fatal编程技术网

C# 使用c更改查询中的SQL表/列名#

C# 使用c更改查询中的SQL表/列名#,c#,sql,parsing,object,graph,C#,Sql,Parsing,Object,Graph,我希望提供一个类似于Facebook的FQL界面的Web API。 我的想法是创建一个真实SQL表到假SQL表的映射,并使用友好的名称等,然后对提交的查询应用一个条件,以在需要时限制访问 我的问题在于用假表名/列名查找/替换真实的表名/列名。显然,“查找-替换”有点蹩脚,可以解决 我的计划是“读取”已发布的查询,将其解释为排序对象图,然后在相关名称中重新创建查询交换,并为相关表附加我的强制条件 有没有人对更好的方法有什么想法,或者对创建查询的对象图有什么建议?我尝试过传统的lexer/pars

我希望提供一个类似于Facebook的FQL界面的Web API。

我的想法是创建一个真实SQL表到假SQL表的映射,并使用友好的名称等,然后对提交的查询应用一个条件,以在需要时限制访问

我的问题在于用假表名/列名查找/替换真实的表名/列名。显然,“查找-替换”有点蹩脚,可以解决

我的计划是“读取”已发布的查询,将其解释为排序对象图,然后在相关名称中重新创建查询交换,并为相关表附加我的强制条件


有没有人对更好的方法有什么想法,或者对创建查询的对象图有什么建议?我尝试过传统的lexer/parser技术,但我正在努力使代码明显可读。有什么东西我可以使用预制的吗?

您可以为每个表创建友好的视图:

create view dbo.tableAView as
select id as UserIdentifier,
       fname as UserFirstName,
...
...
from tableA

视图信息:

您可能希望创建自己的抽象语法树,用于解释发送给您的请求。如果您能够用这个构建一个完整的语法树(请参阅表达式树可以为LINQ做什么),那么您必须能够构建将AST转换为所需FQL的东西


关于如何使用解析器生成器等创建您自己的AST,还有很多需要了解的内容。这取决于您希望在这方面投入多少时间,以及希望所有内容都具有多大的可扩展性。

我现在将对此进行研究。我没有想过这样做,因为我想限制通过Web API提供的功能(以保护服务器)。视图会使SQL与表匹配,但如果我想限制返回的数据,我必须向视图公开一些字段。这不是我想要的。这是我最初的道路。我有一个AST树生成器,但是对于像我这样的新手来说,基本SQL的复杂性是相当困难的。我可以编写足够的代码,但我正在学习AST树。从长远来看,我计划创建一个库,我可以将它传入定义表映射/约束的XML配置文件。这样,我就可以为任何与数据库相关的项目创建解析器。如果对其他人有用的话,我也可以打开这个库的源代码。首先让它在你80%的工作中起作用,然后再添加功能。创建AST并不容易,尤其是第一次尝试时。祝你好运我发现这一点非常正确:)我当前的treeBuilder将用于选择查询,但当涉及子查询时,我会出错“(…)”。我想我得坚持下去。