2013-04-20 36 views
-5

我创建了一个Visual C#SQL CLR数据库项目。我加了两个stored proceduretest1.cstest2.cs。我在test1.cs中有一个函数AddNumber类型'StoredProcedures'已经使用相同的参数类型定义了一个名为'AddNumber'的成员

test2.cs,我想有哪些会做一些别的名称相同的功能,但是这之后我重建它,我得到的错误:

Type 'StoredProcedures' already defines a member called 'AddNumber' with the same parameter types.

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) { 

    } 
}; 

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

+0

对不起,我不理解你的问题。看到它http://stackoverflow.com/faq – 2013-04-20 07:42:08

+0

谢谢,我有两个clr程序,他们都有相同的名称的功能让我们说“LogException”。尽管它们的工作方式不同,但clr都具有此功能。我无法构建解决方案,因为它说上述错误。 – user1254053 2013-04-20 07:47:17

+0

同样,我在这些文件中定义了一些全局变量,如路径等。这是创建问题的原因。我必须重新命名它们,否则将不得不创建单独的CLR项目。 – user1254053 2013-04-20 07:49:32

回答

2

I tried adding a namespace in one of the file but while deploying i get an error "Incorrect syntax" The code to deploy them in sql server is:

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相同的效果,重命名是你想避免的一件事(尽管我不明白为什么)。

+0

谢谢你的回应。我尝试了你的建议,但我仍然无法部署程序集。错误:错误语法:'创建过程'必须是批处理中唯一的语句。任何想法我做错了什么? – user1254053 2013-04-20 08:02:15

+0

是的,正是错误信息告诉你的是:在同一批次中,除了“CREATE PROCEDURE”之外,还有其他语句。或者你有可能在同一批次中放入两个'CREATE PROCEDURE'语句?用“GO”将它们分开放入不同的批次中。 – hvd 2013-04-20 08:07:21

+0

现在的错误是:在程序集'Test'中找不到类型'Namespace.StoredProcedures'。 – user1254053 2013-04-20 08:07:44

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#

相关问题