我想将整数值传递给正在执行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
答案 0 :(得分:1)
为什么通过调用Convert.ToInt32()将1
转换为Integer。1
已经是整数。所以你不需要这样做。
SqlDataReader obj = ExecuteReader("sp_TheWireUser",
new SqlParameter[] {
new SqlParameter("@USERID", 1),
new SqlParameter("@ROLEID", 6)
},
System.Data.CommandType.StoredProcedure);
此代码不应抛出任何编译时错误。如果您收到运行时异常,可能的原因是您的存储过程参数 数据类型与您在此处传递的 不同 。根据您的代码,它应该是Integer
。
注意:希望您在使用后关闭DataReader
。
编辑:您必须告诉 CommandType
using (SqlCommand command = new SqlCommand(procedure, connection))
{
command.CommandType = commandType; //passed from your method parameter
//your remaining code
}
答案 1 :(得分:0)
看看我过去问过的类似问题。 Cleaning Up Resources via Using Statement & Dispose for DataTable, SqlConnection, SqlCommand, & SqlDataAdapter
它将向您展示如何清理数据以及如何添加参数。另外,请等到最后一分钟打开连接,即先添加参数。