Sql server “过程需要未提供的参数…”SQL跟踪指示过程获取参数

Sql server “过程需要未提供的参数…”SQL跟踪指示过程获取参数,sql-server,vb.net,tsql,ssms,dapper,Sql Server,Vb.net,Tsql,Ssms,Dapper,我在这里不知所措,我不明白为什么程序没有得到这个参数 程序procInfoColor: 更改过程[dbo].[procInfoColor] @ID int 像 开始 从tblColor中选择Id,代码,[Description],IsActive,其中Id=@Id 终止 VB.Net代码: 作为整数的公共函数infoColorID作为颜色列表实现了ImaMaintenance.infoColor Dim p=新的动态参数 PAdd@ID,ID,DbType.Int32 尝试 返回DbConn.Q

我在这里不知所措,我不明白为什么程序没有得到这个参数

程序procInfoColor:

更改过程[dbo].[procInfoColor] @ID int 像 开始 从tblColor中选择Id,代码,[Description],IsActive,其中Id=@Id 终止 VB.Net代码:

作为整数的公共函数infoColorID作为颜色列表实现了ImaMaintenance.infoColor Dim p=新的动态参数 PAdd@ID,ID,DbType.Int32 尝试 返回DbConn.QueryOf colorsReconfoolor,p,Nothing,60,CommandType.StoredProcedure.ToList 特例 结束尝试 端函数 SQL跟踪命令文本数据-命令由VB.NET过程调用生成:

exec sp_executesql N'procInfoColor',N'@ID int',@ID=9 错误:

Msg 201,16级,状态4,程序procInfoColor,第2行 过程或函数“procInfoColor”需要未提供的参数“@ID”

我可以通过右键单击来执行该过程,但当我从我的VB.Net应用程序调用该过程时,我收到一条错误消息,说明未提供@ID。我检查了SQL跟踪,它看起来确实是提供给我的

如有任何帮助,我们将不胜感激。

可能的副本:

进行Dapper调用时,请尝试使用命令类型的命名参数名称:

Public Function infoColor(ID As Integer) As List(Of Colors) 
    Implements iMaintenance.infoColor

    Dim p = New DynamicParameters()
    p.Add("@ID", ID, DbType.Int32)

    Try
        Return DbConn.Query(Of Colors)("procInfoColor", 
                                       p, 
                                       Nothing, 
                                       60,
                                       commandType:=CommandType.StoredProcedure ).ToList()
    Catch ex As Exception
    End Try

End Function

能否显示调用SP的代码?假设您的sql命令为cmd,则需要使用cmd.Parameters添加它。Add@ID,SqlDbType.Int.Value=ID再次假定您已将ID声明为整数,而将dim ID声明为整数=1@Steve刚刚加上我的电话来说明它是如何供应的,就像我说的,轨迹显示@ID=9,所以它肯定会成功there@Chicken这就是整个过程哈哈,非常简单。它的全部用途是从下拉列表中选择一种颜色,这4个字段填充一些文本框,然后作为用户更改记录的方式使用。表结构没有任何重复的ID字段,过程也没有。我也问过办公室里的人,每个人都和welp一样,我不知道跟踪显示参数正在传递给sp_executesql,但没有传递给procInfoColor。正确的跟踪应该是exec sp_executesql N'procInfoColor@ID',N'@ID int',@ID=9。哦,哇,这就成功了!我不敢相信这是必要的,非常感谢!虽然我不得不说这很奇怪,但肯定不是我在上一份工作中一直使用Dapper时必须做的事情,它是否取决于您的.NET或SqlServer版本?我认为这取决于编译器如何解释匹配的方法签名。我找不到一个好的参考,Dapper可以查看各种方法签名,以查看CommandType枚举是否被解释为其他签名的int。@haag1没有您指定的值,并且没有CommandType:=您的CommandType.StoredProcedure被传递到错误的参数。您可能已经关闭了选项Strict,将其打开。@Forty3仔细观察,在事务nothing和超时60之间有一个名为Buffered的默认值true。。。我认为这不需要指定,因为它有一个默认值。当我添加true时,它允许我在不使用命名参数的情况下仍然使用CommandType.StoredProcedure。只是其中一个夸克的东西,我想它无法分辨CommandType.StoredProcess属于哪一个,因为我没有定义所有内容。@GSerg是的,你完全正确。谢谢你的帮助!