首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2013-10-06 
asp.net参数化操作数据库,为什么SqlParameter只能用一次?string id context.Request[BRS_id].ToString

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();//加一行这个,但是不知道会不会有其他问题,还请指教

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


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

热点排行