类型'StoredProcedures'已经定义了一个名为'AddNumber'的成员,它具有相同的参数类型

时间:2013-04-20 07:23:44

标签: c# sqlclr database-project

我创建了一个Visual C#SQL CLR数据库项目。我添加了两个stored proceduretest1.cstest2.cs。我在test1.cs中有AddNumber的函数。

test2.cs中,我希望有一个具有相同名称的函数,它将执行其他操作,但这是我重建后得到的错误:

  

类型'StoredProcedures'已经定义了一个名为'AddNumber'的成员   具有相同的参数类型。

test1 的代码如下所示:

public partial class StoredProcedures {
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void test1(string Path) {
        // Put your code here
    }

    private static void AddNumbers(int a, int b) {

    }
};

测试2

public partial class StoredProcedures {
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void test2(string Path) {
        // Put your code here
    }

    private static void AddNumbers(int a, int b) {

    }
};

我不想更改名称,因为我有多个具有相同名称的其他功能。此外,两个文件中也有许多同名的变量。

2 个答案:

答案 0 :(得分:2)

  

我尝试在其中一个文件中添加命名空间但在部署时遇到错误“语法错误”在sql server中部署它们的代码是:

     

CREATE PROCEDURE ADD_NUMBER(@Path nvarchar(400))AS EXTERNAL NAME Test.StoredProcedures.test1 go

我不确定你为什么要从你的问题中删除这一点。如果类StoredProcedures位于名称空间Namespace和程序集Test中,则可以使用EXTERNAL NAME Test.[Namespace.StoredProcedures].test1。就SQL而言,完整类型名称需要是单个标识符,并且由于完整类型名称包含点,因此需要引用它。

请注意,这会导致多个不同类型具有相同的名称StoredProcedures。这没有问题,但它与将StoredProcedures重命名为单独的类StoredProcedure1StoredProcedure2具有相同的效果,重命名是您想要避免的一件事(尽管我看不到原因)。

答案 1 :(得分:0)

我认为你想通过调用你的类方法接口。这是一种简单而有条理的方式。

通过明确地实现接口,如下所示:

public interface ITest {
    void Test();
}
public interface ITest2 {
    void Test();
}
public class Dual : ITest, ITest2
{
    void ITest.Test() {
        Console.WriteLine("ITest.Test");
    }
    void ITest2.Test() {
        Console.WriteLine("ITest2.Test");
    }
}

请注意,这些函数对于类是私有的,因此您必须将该类的对象分配给定义为该特定接口的变量:

var dual = new Dual();
ITest test = dual;
test.Test();
ITest2 test2 = dual;
test2.Test();

我的答案的起点是an answer to Stack Overflow question Inheritance from multiple interface with the same method name in C#