2

我知道这个要求对你们中的许多人来说可能看起来很奇怪,但这是我的项目要求之一。是否可以在 Sp 中添加代码并在 .Net exe 中执行。就像单击按钮一样,我调用一个 SP,SP 返回几行代码,然后程序执行代码。

如果可以,那有可能吗?

我正在使用框架 1.1

4

4 回答 4

3

搜索“动态 c# 代码执行”,谷歌从 2002 年开始提出这个博客……这可能对你有用……

http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm

这篇文章引用了System.CodeDom.Compiler来动态编译程序集,然后使用反射来执行该代码。听起来很有趣 ;)

编辑:正如 DaveL 建议的那样:是否可以动态编译和执行 C# 代码片段?

于 2012-05-31T10:21:08.667 回答
1

如果您正在谈论将 TSQL 编译到表中,然后稍后通过 C# 运行此 TSQL,是的,这是可能的。您需要做的是为 TSQL 脚本文件 (.sql) 编写一个简单的解析器。解析器将通读 SQL 脚本,并在每个GO语句中,将 TSQL 语句添加到相关的 SQL Server 表中(该表可能有两列 1.要运行的数据库/要运行的进程名称。2.查询本身。 )。然后,您可以在运行时动态执行这些 TSQL 块。

如果您正在谈论运行编译到 SQL Server 数据表中的 C#,这是一个不同的球游戏,我不知道有一种简单的方法可以做到这一点(这是可能的)。

我希望这有帮助。

于 2012-05-31T10:13:20.817 回答
1

另一种可能:

通过使用数据库中的某些二进制数据类型varbinary,您可以将程序集作为二进制数据存储在表中。然后,您可以从数据库中读取该二进制数据,将其存储在本地,通过 加载程序集Assembly.LoadFrom(),然后使用反射找到一些您可以使用的特殊类型或入口点。

于 2012-05-31T10:27:41.723 回答
0

您可能想要 DLR(其中 D 代表 Dynamic),不幸的是,这是 .NET 4.0 以上版本。

听起来你在一个可怕的遗留代码地狱中;而不是你而不是我。

您可以创建自己的脚本语言以在您的应用程序中运行,但这会很慢且不理想。像 YACC 这样的东西会让你分道扬镳,但这是一个坎坷的旅程(已经看到有人在 Java 中尝试这种行为)。

于 2012-05-31T10:14:38.070 回答