读书人

asp.net参数化操作数据库为啥SqlPar

发布时间: 2013-10-06 18:25:14 作者: rapoo

asp.net参数化操作数据库,为什么SqlParameter只能用一次?

            string id = context.Request["BRS_id"].ToString();//取用户输入的用户名
string password = FormsAuthentication.HashPasswordForStoringInConfigFile(context.Request["BRS_password"].ToString(), "MD5");//取用户输入的密码并加密 SqlParameter[] sp = new SqlParameter[]
{
new SqlParameter("@id",SqlDbType.VarChar),
new SqlParameter("@password",SqlDbType.VarChar)
};
sp[0].Value = id;
sp[1].Value = password;
SqlDataReader dr = SQLHelper.ExecuteReader("SELECT lock FROM users WHERE id = @id", CommandType.Text, sp);//这里可以正常读到
if (dr.Read())
{
if (int.Parse(dr[0].ToString()) >= 3)//检测用户锁状态
context.Response.Write("LOCKED");
else
{
dr = SQLHelper.ExecuteReader("SELECT name,department,role,verification FROM users WHERE id = @id and password = @password", CommandType.Text, sp);//卡在这里过不去
if (dr.Read())
{
if (dr[3].ToString() != auth.ToLower())//验证用户终端
context.Response.Write("FF");
else
{
.......
.........
............

[解决办法]
真辛苦 还ADO.NET,直接用linq那 Submitchanges
[解决办法]
引用:
已解决
        public static SqlDataReader ExecuteReader(string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
{
SqlDataReader reader;
try
{
init();
cmd = new SqlCommand();
SetCommand(cmd, cmdText, cmdType, cmdParms);
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();//加一行这个,但是不知道会不会有其他问题,还请指教
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());


}
return reader;
}


是这样的,每次执行后清空参数集合,下次重新添加。另外楼主把解决方法贴出,挺厚道。
[解决办法]
cmd.Parameters.Clear();//加一行这个,但是不知道会不会有其他问题,还请指教

你这不是白问了吗,明显嘛,你这样调用,直接清空了,不信你根据工具的智能感知提示看下说明


如果你想多次使用,请把对象声明为局部变量,就是对象的作用域,弄大些,如果是在一个方法里定义的,那作用域只能是该方法范围内

读书人网 >asp.net

热点推荐