类型“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.cs
和test2.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
重命名为单独的类 StoredProcedure1
和 StoredProcedure2
具有相同的效果,并且重命名是您想要避免的一件事(尽管我不明白为什么)。
【讨论】:
感谢 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”的成员,具有相同的参数类型的主要内容,如果未能解决你的问题,请参考以下文章
如何一次性将所有 varchar 列/变量/参数转换为 nvarchar 类型?
已经使用相同的参数类型定义了一个名为“Create”的成员[重复]
没有为类型“List<UserModal>”定义 getter 'displayName'。但是我已经定义了。有啥我做错了吗?