Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程参数名是否必须与从C#传递的参数匹配?_C#_Sql Server_Stored Procedures - Fatal编程技术网

存储过程参数名是否必须与从C#传递的参数匹配?

存储过程参数名是否必须与从C#传递的参数匹配?,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我有如下的存储过程 CREATE PROCEDURE SP_Test() @Name VARCHAR(10), @Dept VARCHAR(10) AS BEGIN ... END 我从C#调用存储过程如下: SqlCommand scCommand = new SqlCommand("SP_Test", MysqlCon); scCommand.CommandType = CommandType.StoredProcedure; scCommand.Paramete

我有如下的存储过程

CREATE PROCEDURE SP_Test()
    @Name VARCHAR(10),
    @Dept VARCHAR(10)
AS
BEGIN
    ...
END
我从C#调用存储过程如下:

SqlCommand scCommand = new SqlCommand("SP_Test", MysqlCon);
scCommand.CommandType = CommandType.StoredProcedure;

scCommand.Parameters.Add("@UserName", SqlDbType.VarChar, 10).Value = "SomeVal";
scCommand.Parameters.Add("@Department", SqlDbType.VarChar, 10).Value = "SomeVal";
...
...

这里我给出的名称与过程参数名称不同,因此会导致任何错误吗?

是的,必须与存储过程参数中的名称相同,因为编译器基于名称映射参数,因此如果您给出不同的名称,它将无法映射值

所以你的C代码应该是这样的

scCommand.Parameters.Add("@Name", SqlDbType.VarChar, 10).Value = "SomeVal";
scCommand.Parameters.Add("@Dept", SqlDbType.VarChar, 10).Value = "SomeVal";

为什么不运行代码并亲自查看呢?如果参数和值之间没有关系,您希望框架如何映射它们?ADO.NET会按名称而不是位置将参数传递给SQL Server。是的,这将导致错误——您不能传递不属于定义的正式部分的参数,并且必须传递没有默认值的参数。@丹麦语,参数和类型的编号是相同的,因此我没有收到任何错误。顺便说一句,您应该在命名自己的过程时这样做。它是为微软的程序保留的。@Damien_,不相信我的人,我认为它代表[荷马之声]愚蠢的程序。就应用程序维护或调试而言,我创造了奇迹。如果SP中只有两个参数,而Im只传递C#中的两个参数值,会怎么样。所以它不会按顺序匹配?在本例中,您不必匹配顺序,但需要确保参数名称拼写正确correctly@MagendranV:如果您的问题是“我是否可以通过位置传递参数”,您可能应该问这个问题,而不是问“它是否会导致任何错误”。但是没有什么好的理由不知道存储过程参数的名称——依赖参数顺序有很大的问题,特别是当与T-SQL的巴洛克式隐式转换规则结合使用时。