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

1Convert.ToInt32() を呼び出して Integer に変換するのはなぜですか。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 に答える