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

Posted

技术标签:

【中文标题】类型“StoredProcedures”已经定义了一个名为“AddNumber”的成员,具有相同的参数类型【英文标题】:Type 'StoredProcedures' already defines a member called 'AddNumber' with the same parameter types 【发布时间】:2013-04-20 07:23:44 【问题描述】:

我创建了一个 Visual C# SQL CLR 数据库项目。我添加了两个stored procedure:test1.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) 

    
;

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

【问题讨论】:

对不起,我没听懂你的问题。看到它***.com/faq 谢谢,我有两个 clr 程序,它们都有相同的函数名,比如说“LogException”。两个 clr 都具有此功能,尽管它们的工作方式不同。我无法构建解决方案,因为它说上述错误。 类似地,我在这些文件中定义了一些全局变量,如路径等。这也是造成问题的原因。我必须重命名它们,或者必须创建单独的 CLR 项目。 看我的回答:***.com/a/16118110/2218635 【参考方案1】:

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

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

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

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

【讨论】:

感谢 hvd 的回复。我尝试了您的建议,但仍然无法部署程序集。错误:语法不正确:“创建过程”必须是批处理中的唯一语句。知道我在做什么错吗? 是的,正是错误消息告诉您的内容:您在同一批次中还有除 CREATE PROCEDURE 之外的其他语句。或者您是否将两个CREATE PROCEDURE 语句放在同一个批次中?用GO分隔它们,将它们分成不同的批次。 现在的错误是:在程序集“Test”中找不到类型“Namespace.StoredProcedures”。 我不知道你是如何命名你的命名空间的,所以我选择了Namespace 作为命名空间名称。您需要将其更改为您使用的任何内容。 这就是我在 c# 代码中添加它的方式: namespace abc public partial class StoredProcedures private const string ERROR_FILE_PATH = "Logs.txt"; public static void test1(string Path) Test.[abc.StoredProcedures].test1【参考方案2】:

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

通过显式实现接口,如下所示:

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#

【讨论】:

以上是关于类型“StoredProcedures”已经定义了一个名为“AddNumber”的成员,具有相同的参数类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 EntityFramework 调用存储过程?

如何一次性将所有 varchar 列/变量/参数转换为 nvarchar 类型?

已经使用相同的参数类型定义了一个名为“Create”的成员[重复]

没有为类型“List<UserModal>”定义 getter 'displayName'。但是我已经定义了。有啥我做错了吗?

163-委托的定义和声明

Wordpress: 自定义文章类型无法使用分页