0

我想将整数值传递给正在执行 SqlDataReader 的 SqlParameter,但是当我传递整数值时,它说,没有提供参数,下面是我的代码:

Common SqlDataReader Function

public static SqlDataReader ExecuteReader(string procedure, SqlParameter[] parameters, CommandType commandType)
    {
        SqlDataReader reader = null;
        SqlConnection connection = new SqlConnection(connectionString);
        using (SqlCommand command = new SqlCommand(procedure, connection))
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            if (parameters != null)
            {
                if (commandType == CommandType.StoredProcedure)
                    command.Parameters.AddRange(parameters);
            }
            reader = command.ExecuteReader(CommandBehavior.CloseConnection);
        }
        return reader;
    }

调用代码:

SqlDataReader obj = SqlHelper.ExecuteReader("sp_TheWireUser", new SqlParameter[] { new SqlParameter("@USERID", Convert.ToInt32(1)), new SqlParameter("@ROLEID", Convert.ToInt32(6)) }, System.Data.CommandType.StoredProcedure);
        Response.Write(obj.HasRows);

我也尝试1作为参数输入,"1"但都不起作用

ALTER PROCEDURE [dbo].[sp_TheWireUser]
    @USERID INT,
    @RoleID INT
AS
BEGIN
    SELECT USR.USERID FROM Users USR
    INNER JOIN UserRoles UR
    ON USR.UserID = UR.UserID
    INNER JOIN Roles R
    ON UR.RoleID = R.RoleID
    WHERE R.RoleID = @RoleID
    AND USR.UserID = @USERID
END
4

2 回答 2

1

为什么要1通过调用 Convert.ToInt32() 转换为整数。1已经是整数了。所以你不需要这样做。

SqlDataReader obj = ExecuteReader("sp_TheWireUser", 
                new SqlParameter[] { 
                    new SqlParameter("@USERID", 1),
                    new SqlParameter("@ROLEID", 6)
                },
                System.Data.CommandType.StoredProcedure);

此代码不应引发任何编译时错误。如果您遇到运行时异常,可能的原因是您的 Stored Procs 参数的数据类型与您在此处传递的数据类型不同。它应该Integer根据您的代码。

注意:希望您DataReader在使用后关闭。

编辑:你必须告诉CommandType

 using (SqlCommand command = new SqlCommand(procedure, connection))
 {
    command.CommandType = commandType; //passed from your method parameter
    //your remaining code
 }
于 2012-08-21T20:46:05.820 回答
0

看看我过去问过的一个类似问题。 通过对 DataTable、SqlConnection、SqlCommand 和 SqlDataAdapter 使用 Statement & Dispose 清理资源

它将向您展示如何清理数据以及如何添加参数。另外,等到最后一分钟打开连接,即先添加参数。

于 2012-08-21T20:59:56.870 回答