【问题标题】:Is there a tool to convert T-SQL Stored Procedures to C#? [closed]是否有将 T-SQL 存储过程转换为 C# 的工具? [关闭]
【发布时间】:2011-08-28 21:33:15
【问题描述】:

2017 年更新:

实际上,答案是否,即使有你也应该非常谨慎地使用它

实际上只有两种方法可以解决这个问题:

a) 咬紧牙关,手动、费力地转换所有内容,并使用某种验证方法来检查所有内容是否继续按预期运行,例如单元/回归测试。使用 Linqer 等工具(如果可用)作为帮助,以解决部分问题。

b) 从头开始​​。

没有选择 c) 让其他东西整齐而自动地处理所有事情,而且它不可能涵盖所有情况。 T-SQL 可以做很多 LINQ 不能做的事情(更新、插入和删除),还有很多事情你最好在 C# 中用不同的方式做(比如游标)。

很少有像这样的问题得到精心设计、详尽的解决方案,可以相信不会使功能退化(例如商业 VB6 到 VB.NET 转换器,由于潜在客户的数量庞大,这可能证明花费巨大的努力是合理的,并且如果出现问题,您可以在哪里接电话或找律师),所以如果存在这样的工具,您应该非常小心。从与 LINQ 兼容的 SQL 子集到 LINQ 的转换是一个有限的问题,并且我认为 Linqer 可以被信任。

这个问题试图找出一个可以帮助选项 a) 的工具,但我想很多阅读这篇文章的人都在寻找选项 c)。这个问题和答案的一个子集并不是一个可怕的想法,但它并没有自动消除剩余的负担,因为即使是许多简单的存储过程也不仅仅是以 LINQ 可表达的形式进行查询。对于我提到的任何项目,选择 a) 仍然太站不住脚。


原问题如下:

我有几个项目需要维护,这些项目使用大量 SQL Server 存储过程(在 T-SQL 中)。我知道如何维护它们,但是由于有很多工具可以在不同的语言之间自动转换,我想知道是否有任何工具可以将存储过程转换为 C# 代码?

我不想将它们转换为 CLR 存储过程;我只是想将数据层中的逻辑迁移到项目的 C# 端并自动化繁重的工作。大多数存储过程(可能是 70%?)都是简单的“SELECT * FROM table WHERE id = @id”事务,它们也可以通过 Entity Framework 来完成。

我知道 T-SQL 和 C# 之间不是一条直线,因为它是从 VB.NET 到 C#,而且转换也不是那么简单;例如,您将需要在 C# 中引入一个数据层,而光标之类的某些东西没有相应的概念。如果可能的话,我只想摆脱存储过程而无需重复的体力劳动。

由于错误的假设已经对此提出质疑:我已经知道 T-SQL,并且给出了这些存储过程中的任何一个的代码,我可以告诉您它们的作用。我不希望逻辑继续驻留在存储过程中有很好的实际原因。

【问题讨论】:

  • 不要这样做...不。
  • 坏主意 - T-SQL 存储过程功能强大并且使用是有原因的 - 将它们移动到 C# 不会给您带来任何好处 - 但有很多缺点。不要这样做。习惯 T-SQL。
  • 我重新表述了我的问题。存储过程大多不是做 T-SQL 最擅长的存储过程,而是为了成为存储过程而存储过程,因为做一个简单的、赤裸裸的 SELECT 对灵魂有害。请重新考虑。
  • 如果你重新开始,这可能是一个不同的讨论(而且我相信这里有很多关于使用存储过程的主题)。但由于它们已经以这种方式实现,请不要将它们更改为 C#。
  • 我认为这是一个有效的问题。当前存储过程中可能有业务逻辑,最好将其移至应用程序层;或者它可以作为一个学习练习。

标签: c# sql-server tsql stored-procedures


【解决方案1】:

查看Linqer:

Linqer 是一个 SQL 到 LINQ 的转换器 工具。它可以帮助您学习 LINQ 和 转换现有的 SQL 语句。

不是每个 SQL 语句都可以 转换为 LINQ,但 Linqer 涵盖 许多不同类型的 SQL 表达式。

因为 LINQ 是 C# 的一部分,所以它是 对数据类型转换敏感。 Linqer 执行所需的类型铸件 在生成的 LINQ 语句中。

【讨论】:

  • 简洁的小程序。不幸的是,您必须将每个查询都粘贴到此处,虽然它提供了一个 LINQ 查询,但它不会创建您需要替换当前存储过程调用的实际代码。
  • @Fosco:是的,这并不理想。我必须一次执行一个存储过程,但我至少可以在我的 C# 项目中搜索存储过程。
  • @Jesper 你有机会发布一些代码吗?我真的无法弄清楚像 select * from x where id = @param 这样的简单存储过程是如何给您带来这么多麻烦的……并将 LINQ 引入其中,而不是仅仅将其变成 SQLCommand……大吃一惊。我开始认为代码问题与数据访问无关。
  • @Fosco 我认为您可能错过了重点,这并不是因为对 SQL 感到不舒服,而是通过将数据访问代码移出数据库并移入应用程序来整合逻辑。 LINQ 还比 SQL 有一些好处,它为您提供了一个强类型的数据库 DAL 以实现编译类型安全,并且是一种标准化的查询语言,可用于 XML 和内存中对象等其他数据源。
  • 我刚下载它运行它 AV'ed 然后 AVG 给了我木马下载警报 Tutils.exe in temp。我必须进行调查,但 avg 一直在运行 不知道它们是否有关联,但要小心。
猜你喜欢
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
相关资源
最近更新 更多