-5

我创建了一个 Visual C# SQL CLR 数据库项目。我添加了两个存储过程test1.cstest2.cs。我在test1.csas中有一个函数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) {

    }
};

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

4

2 回答 2

2

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

CREATE PROCEDURE ADD_NUMBER (@Path nvarchar(400)) 作为外部名称 Test.StoredProcedures.test1 去

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

请注意,这将导致多个不同类型具有相同的名称StoredProcedures。这没有问题,但它与重命名StoredProcedures为单独的类StoredProcedure1和具有相同的效果StoredProcedure2,并且重命名是您想要避免的一件事(尽管我不明白为什么)。

于 2013-04-20T07:57:22.073 回答
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();

我的回答的出发点是对 Stack Overflow 问题Inheritance from multiple interface with the same method name in C#的回答。

于 2013-04-20T08:01:47.277 回答