Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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#_Asp.net_Function_Callback_Execute - Fatal编程技术网

C# 如何调用(执行)存储在数据库中的函数?

C# 如何调用(执行)存储在数据库中的函数?,c#,asp.net,function,callback,execute,C#,Asp.net,Function,Callback,Execute,我想在C中执行一系列函数。这些函数名存储在数据库中 例如,我有以下功能: 功能1、功能2、功能3 我想运行一个查询,查询会返回给我,例如Function1和Function2的名称 所以问题是,当我从数据库中检索它们时,如何运行它们 例如,如果我的函数名存储在数组中 我想调用数组索引2和4中的函数。只有2和4个…它们执行它们假设您的函数在一个类中,您可以执行以下操作: class Program { static void Main(string[] args) {

我想在C中执行一系列函数。这些函数名存储在数据库中 例如,我有以下功能:

功能1、功能2、功能3

我想运行一个查询,查询会返回给我,例如Function1和Function2的名称

所以问题是,当我从数据库中检索它们时,如何运行它们

例如,如果我的函数名存储在数组中


我想调用数组索引2和4中的函数。只有2和4个…它们执行它们

假设您的函数在一个类中,您可以执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(RunFunction("Function1"));
    }
    static object RunFunction(string functionName)
    {
        MethodInfo[] methodInfos = typeof(CallableFunctions).GetMethods(BindingFlags.Public | BindingFlags.Instance);
        var callableFunctions = new CallableFunctions();
        return methodInfos.First(mi => mi.Name == functionName).Invoke(callableFunctions, null);
    }
}
class CallableFunctions
{
    public string Function1()
    {
        return "Abc";
    }
    public string Function2()
    {
        return "Def";
    }
}
方法RunFunction在类可调用函数中执行无参数方法并打印其返回值

请注意,这可能是一种糟糕的编程风格。如果你没有很好的理由这么做,那就不要这样做

备注:
根据您试图实现的目标,还有其他几种可能性。您可以在Sql Server中编写存储过程/TVF,或者如果您使用MS-Sql,则可以为数据库创建CLR项目,并将C方法部署到Sql Server上并在那里执行它们。或者,您可以根据结果有条件地执行分支。您在此处尝试的操作可能非常危险。

假设您的函数位于一个类中,您可以执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(RunFunction("Function1"));
    }
    static object RunFunction(string functionName)
    {
        MethodInfo[] methodInfos = typeof(CallableFunctions).GetMethods(BindingFlags.Public | BindingFlags.Instance);
        var callableFunctions = new CallableFunctions();
        return methodInfos.First(mi => mi.Name == functionName).Invoke(callableFunctions, null);
    }
}
class CallableFunctions
{
    public string Function1()
    {
        return "Abc";
    }
    public string Function2()
    {
        return "Def";
    }
}
方法RunFunction在类可调用函数中执行无参数方法并打印其返回值

请注意,这可能是一种糟糕的编程风格。如果你没有很好的理由这么做,那就不要这样做

备注:
根据您试图实现的目标,还有其他几种可能性。您可以在Sql Server中编写存储过程/TVF,或者如果您使用MS-Sql,则可以为数据库创建CLR项目,并将C方法部署到Sql Server上并在那里执行它们。或者,您可以根据结果有条件地执行分支。您在这里尝试的操作可能非常危险。

我可以为您提供一种方法来完成这项操作

如果函数的名称已知且有限,则可以通过使用传递给函数的参数来实现切换每个函数的函数。 i、 这是一个伪代码

FUNCTION(INT functionCode)
    SWITCH(functionCode)
        CASE code1:
            CALL FUNCTION1
        CASE code2:
            CALL FUNCTION2
    END
END
现在,您可以解析functionCode并根据查询结果调用此包装器函数。如果需要调用多个函数,可以重复调用此包装器函数。但问题是,如果您需要将参数解析为FUNCTION1、FUNCTION2等,那么在这种情况下,您必须将这些参数绑定为一个对象,并将其解析为包装器函数


这是一般性的回答。第一个答案似乎集中在你的问题上。

我可以给你一个方法来做这件事

如果函数的名称已知且有限,则可以通过使用传递给函数的参数来实现切换每个函数的函数。 i、 这是一个伪代码

FUNCTION(INT functionCode)
    SWITCH(functionCode)
        CASE code1:
            CALL FUNCTION1
        CASE code2:
            CALL FUNCTION2
    END
END
现在,您可以解析functionCode并根据查询结果调用此包装器函数。如果需要调用多个函数,可以重复调用此包装器函数。但问题是,如果您需要将参数解析为FUNCTION1、FUNCTION2等,那么在这种情况下,您必须将这些参数绑定为一个对象,并将其解析为包装器函数

这是一般性的回答。第一个答案似乎集中在你的问题上。

试试这个:

public partial class Default2 : System.Web.UI.Page
{
  protected void Button1_Click(object sender, EventArgs e)
  {
      string[] arr = { "func1", "func2" };
      System.Reflection.MethodInfo methodInfo = typeof(Default2).GetMethod(arr[0]);
      if (methodInfo != null)
      {
          methodInfo.Invoke(this, null);
      }
  }
  public void func1()
  {
      Response.Write("func1");
  }
  public void func2()
  {
      Response.Write("func2");
  }
}
注:

函数的访问类型必须指定为public、private和protected

试试这个:

public partial class Default2 : System.Web.UI.Page
{
  protected void Button1_Click(object sender, EventArgs e)
  {
      string[] arr = { "func1", "func2" };
      System.Reflection.MethodInfo methodInfo = typeof(Default2).GetMethod(arr[0]);
      if (methodInfo != null)
      {
          methodInfo.Invoke(this, null);
      }
  }
  public void func1()
  {
      Response.Write("func1");
  }
  public void func2()
  {
      Response.Write("func2");
  }
}
注:


函数的访问类型必须指定为public、private和protected

这些函数的实际实现存储在哪里?看看这可能是我听过的最糟糕的设计思想。但是如果你知道这些方法存储在哪个类中,你可能会使用反射。这些函数的实际实现存储在哪里?看看这可能是我听过的最糟糕的设计思想。但是,如果你知道这些方法存储在哪个类中,你可能可以使用反射。非常感谢…这非常有用。这不是基本上相同的答案Jan W.posted,但是没有额外的信息和LINQ吗?非常感谢…这非常有用。这不是基本上相同的答案Jan W.posted,但是没有额外的信息和LINQ吗?