SQL 查询在 EA 中有效,但在 API 上不适用于 C#

SQL query works in EA but doesn't work with C# on the API

提问人:vascobnunes 提问时间:11/19/2021 最后编辑:Geert Bellekensvascobnunes 更新时间:11/19/2021 访问量:182

问:

我创建了一个 C# 脚本,该脚本使用来自 excel 的数据构建 sql 查询,然后查询 EA 存储库。

sqlquery_part1A = "select obj.object_id from (t_object obj inner join t_connector j on (obj.Object_ID=j.end_Object_ID)) inner join t_object endobj on (j.start_Object_ID=endobj.Object_ID) where obj.alias = '" + adu_alias.Replace("'", "''") + "' and endobj.Name = '" + datastream + "' and obj.Name = '" + adu_name + "'";
int element_count = repository.GetElementSet(sqlquery_part1A, 2).Count;

查询工作正常,除非来自 excel 的某个字段具有换行符。F.D.公司

"global_sla_l2p_nrt.*\.nc(|\.gz)$ (Product: L2P-SLA NRT), 

global_swh_l2p_nrt.*\.nc(|\.gz)$ (Product: L2P-SWH NRT), 

global_sla_l2p_stc.*\.nc(|\.gz)$ (Product: L2P-SLA STC)"

发生这种情况时,脚本在存储库中找不到任何条目。但是,如果我对 EA 进行完全相同的查询,它会返回一个条目。

下面是一个查询示例:

select obj.object_id from (t_object obj inner join t_connector j on (obj.Object_ID=j.end_Object_ID)) inner join t_object endobj on (j.start_Object_ID=endobj.Object_ID) where obj.alias = 'global_sla_l2p_nrt.*\.nc(|\.gz)$ (Product: L2P-SLA NRT), 

global_swh_l2p_nrt.*\.nc(|\.gz)$ (Product: L2P-SWH NRT), 

global_sla_l2p_stc.*\.nc(|\.gz)$ (Product: L2P-SLA STC)' and endobj.Name = 'DIS-ING.FTP' and obj.Name = 'L2P  Service products'

谁能帮忙?

C# 企业架构师

评论

1赞 Geert Bellekens 11/19/2021
你能发布一个实际查询的例子吗?
2赞 qwerty_so 11/19/2021
换行符总是很棘手。有 \n、\r、\n\r 和 \r\n。我总是经历排列。或者,使用 LIKE 并将其替换为通配符。
0赞 vascobnunes 11/19/2021
@GeertBellekens 我在 que 问题中添加了一个示例。
1赞 Charlieface 11/19/2021
你应该使用正确的参数化,然后你就赢了;没有这样的问题。如果其中一个值有,你会怎么做'; DROP DATABASE MyDb; --
1赞 Geert Bellekens 11/20/2021
@Charlieface在这种情况下。EA 的 api 要求提供带有 select 语句的字符串。

答:

1赞 vascobnunes 11/19/2021 #1

我的解决方案是用 Environment.NewLine 替换换行符:

sqlquery_part1A = sqlquery_part1A.Replace("\n", Environment.NewLine);

评论

1赞 qwerty_so 11/26/2021
你可以接受你自己的答案......