2

我想使用 System.Reflection 的 MethodInfo 和 MethodBody 类调用一个方法,并且该方法的名称和主体在 sql server 中我该怎么做,请帮忙

         SqlConnection con = new SqlConnection(GlobalData.GetConnectionString());
            SqlCommand cmd = new SqlCommand("select CodeSnippet from SubMenu where Role_ID='"+GlobalData.RoleID+"' and ChildMenu='"+sender.ToString()+"'", con);
            if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                string codeSnippet = reader["CodeSnippet"].ToString();
                Type type = typeof(Helper);
                MethodInfo method = type.GetMethod(codeSnippet);

                Helper c = new Helper();
                method.Invoke(c, null);
            }
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }

我已经完成了,现在我想要来自 microsoft sql server 的方法体

4

1 回答 1

2

我强烈建议不要允许在生产服务器上执行任意代码片段;错误或恶意代码做坏事的风险很大。如果可以的话,我会说将代码保留在您的项目中,并通过某种键(可以是名称,但任何唯一标识符就足够了)引用它 - 即运行“LanuchTheMissiles”操作,其中“LaunchTheMissles”在枚举中或在明确设计为此类操作的接收者的类中定义。

如果您真的想使用代码片段,那么 C# 可能不是最方便的代码片段语言 - 尽管可以通过CSharpCodeProvider完成。但是,有些工具设计用于脚本语言 - IronPython 等。如果您乐于使用不同的语言,您可以很容易地嵌入 IronPython 。然而,这仍然存在与执行任意代码相关的大部分风险。

如果代码片段将由您的开发人员提供,我会说:只需将代码放在主项目中即可。

如果您的用户将提供这些片段,我会说:不要;只是不要。

另外:您的 SQL 要求注入。

于 2013-03-07T13:09:19.980 回答