【问题标题】:SQL exception despite providing parameters尽管提供了参数,但 SQL 异常
【发布时间】:2025-12-09 11:45:01
【问题描述】:

尝试将数据存储到 sql 数据库时出现以下异常:

Procedure or function 'myFunction' expects parameter '@username', which was not supplied.

这是我正在调用的存储过程:

@username varchar(20),
@password varchar(20),
@puntos int,
@partidaGanada bit
AS
BEGIN
DECLARE @id int
SET @id = (SELECT COUNT(*) AS id FROM Juegos)

if @id > 0
BEGIN
    SET @id = (SELECT MAX(Juegos.id) FROM Juegos)
END

SET @id = @id + 1

INSERT INTO Juegos(Juegos.id, jugador_id, Juegos.partidaGanada, Juegos.puntos) values (@id, (SELECT (Jugador.id) FROM Jugador WHERE Jugador.username = @username AND Jugador.password = @password), @partidaGanada, @puntos)

END

这是我提供参数的“myFunction”:

...
Dim parametros(3) As SqlParameter
parametros(0) = New SqlParameter("@username", game.Jugador.Nombre) //string
parametros(1) = New SqlParameter("@password", game.Jugador.Password) //string
parametros(2) = New SqlParameter("@puntos", game.Puntos) //integer
parametros(3) = New SqlParameter("@partidaGanada", game.PartidaGanada) //boolean

    Dim cmd As New SqlCommand

    cmd.Connection = cn
    cmd.CommandType = CommandType.Text
    cmd.CommandText = procedureName

    If (parameters IsNot Nothing) Then //parameters isnot nothing, I checked
        cmd.Parameters.AddRange(parameters)
    End If


    openCn() //there are no issues with the connection to the database, I checked that aswell
    cmd.ExecuteNonQuery()
    closeCn()
...

这些是异常发生前的参数值:

@username = "hello"
@password = "123"
@puntos = 50
@partidaGanada = false

尽管为所有参数提供了值,但为什么会出现此错误?

【问题讨论】:

  • 您是否将这些参数添加到SqlCommand?您也可以发布该代码吗?
  • 将命令类型更改为存储过程。

标签: .net sql-server vb.net


【解决方案1】:

将您的命令类型更改为存储过程。 :)

【讨论】:

    【解决方案2】:

    正如 vishal 在 cmets 中提到的,您需要将这些参数添加到命令中。

    在创建/定义所有参数后添加以下语句。

    cmd.Parameters.AddRange(parametros)
    

    【讨论】:

    • 我已经将参数添加到sql命令中,这不是问题。
    【解决方案3】:

    您的命令中是否包含CommandType

    【讨论】:

    • 是的,等一下,我会在问题中添加更多代码
    最近更新 更多