| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 813 人关注过本帖
标题:求解释,代码很简单,但是我想不明白,望明白的认识指点下
只看楼主 加入收藏
lxb932979339
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:84
专家分:313
注 册:2013-4-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求解释,代码很简单,但是我想不明白,望明白的认识指点下
程序代码:
<%@ WebHandler Language="C#" Class="deldata" %>
using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Collections.Generic;
public class deldata : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Model model = new Model();
        model.FName = context.Request.Form["FName"];
        model.FCategoryID = IsNull(context.Request.Form["Fcate"]) ? (int?)Convert.ToInt32(context.Request.Form["Fcate"]) : null;
        model.FAuthor = context.Request.Form["Fauthor"];
        model.IsDel = IsNull(context.Request.Form["Fcate"]) ? (bool?)Convert.ToBoolean(context.Request.Form["IdDel"]) : null; //context.Request.Form["IdDel"];
        model.FYearPublished = IsNull(context.Request.Form["Fyear"]) ? (int?)Convert.ToInt32(context.Request.Form["Fyear"]) : null;//(int?) Convert.ToInt32(context.Request.Form["Fyear"]); 

        //这里不理解,求解释
        int rel = DelExecuteNonQuery(model, context);
        if (rel <= 0)
        {
            context.Response.Write("alert(\"删除失败\");");
        }
        else
        {
            context.Response.Redirect("SelecteData.ashx");
        }
    }
    public bool IsNull(object value)
    {
        if (value.ToString().Trim().Length == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    public int DelExecuteNonQuery(Model model, HttpContext context)
    {
        List<SqlParameter> sqlParameterList = new List<SqlParameter>();
        List<string> sqlList = new List<string>();
        string sqlStr = "delete from T_Book";
        if (model.FName.ToString().Trim().Length > 0)
        {
            sqlList.Add("FName like @FName");
            sqlParameterList.Add(new SqlParameter("@FName", "%" + model.FName + "%"));
        }
        if (model.FCategoryID != null)
        {
            sqlList.Add("FCategoryID like @FCategoryID");
            sqlParameterList.Add(new SqlParameter("@FCategoryID", "%" + model.FCategoryID + "%"));
        }
        if (model.FYearPublished != null)
        {
            sqlList.Add("FYearPublished like @FYearPublished");
            sqlParameterList.Add(new SqlParameter("@FYearPublished", "%" + model.FYearPublished + "%"));
        }
        if (model.IsDel != null)
        {
            sqlList.Add("IsDel like @IsDel");
            sqlParameterList.Add(new SqlParameter("@IsDel", "%" + model.IsDel + "%"));
        }
        if (model.FAuthor != string.Empty)
        {
            sqlList.Add("FAuthor like @FAuthor");
            sqlParameterList.Add(new SqlParameter("@FAuthor", "%" + model.FAuthor + "%"));
        }
        if (sqlList.Count > 0)
        {
            string sqlTxt = string.Join(" and ", sqlList.ToArray());
            sqlStr = sqlStr + " where " + sqlTxt;
        }
        else
        {
            context.Response.Write("alert(\" 你会把所有数据都删除掉的!!!\");");
            return 0;
        }
        SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Books;User ID=sa;Password=123");
        con.Open();
        SqlCommand com = new SqlCommand();
        com.Connection = con;
         = sqlStr;
        com.Parameters.AddRange(sqlParameterList.ToArray());
        int rel = com.ExecuteNonQuery();
        return rel;
    }
}

这算个模糊查询删除记录的一个小程序吧,HTML代码就不写了,这个是一般处理程序,问题就是我明明已经把要删除的记录删除了,并且上述做标记处代码中的rel变量是大于0的,但是调试过程中不知道什么原因,(我在if判断出设了断点),走到if判断处,按F11,语句往下执行,但是再按F11 又回到if判断处了,并且rel变量为0,求解释。期待中。。。。。。


[ 本帖最后由 lxb932979339 于 2013-5-30 21:33 编辑 ]
2013-05-30 21:30
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:0 
1.int rel = DelExecuteNonQuery(model, context);
2.if (rel <= 0)//断点
{
3.context.Response.Write("alert(\"删除失败\");");//断点
}
else
{
4.context.Response.Redirect("SelecteData.ashx");//断点
}
模拟一下你说的情景(假设有如上断点).
A.程序从2开始
B.因为rel>0,F11后将走到4处中断
C.再F11,执行跳转("SelecteData.ashx")
D.然后又在2处中断了,且rel==0

我觉得惟一可能的情况就是C中SelecteData.ashx处理之后再次跳转到了当前页面,顺序执行下来理想的情况是rel==0.
完美解决???
2013-05-30 21:56
lxb932979339
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:84
专家分:313
注 册:2013-4-24
收藏
得分:0 
为什么SelecteData.ashx处理后再次跳到当前页面rel会是0呢
2013-05-31 10:20
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:20 
回复 3楼 lxb932979339
如果真如我所说的跳转到SelecteData.ashx处理后又再次跳到当前页面,然后rel==0了.
至于为什么rel==0.
那自然是DelExecuteNonQuery(model, context)执行后返回结果为0,可以详细查看model的信息和方法的执行.
2013-05-31 12:17
快速回复:求解释,代码很简单,但是我想不明白,望明白的认识指点下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.085828 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved