2013-04-20 47 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#

相關問題