for(int i = 0;i < dg_Cart.Items.Count; i++)
{
string str_ID=dg_Cart.Items[i].Cells[1].Text;   //物品ID
TextBox txtSL = (TextBox)dg_Cart.Items[i].FindControl("Txt_Sqsl");//申请数量,又用户输入
string wpbh=dg_Cart.Items[i].Cells[2].Text.ToString();//物品编号
string zksl=dg_Cart.Items[i].Cells[8].Text.ToString();//在库数量
string str_Tmp = txtSL.Text;
int str_Tmp1 = new int();
str_Tmp1=int.Parse(str_Tmp);int sl=new int();
sl=int.Parse(zksl);
if (str_Tmp1 <= sl)//判断:如果申请数量小于或者等于在库数量,执行……
{
string strSql = "insert into SQ_LIST  values ('"+str_ID+"','"+djh+"','"+wpbh+"','"+str_Tmp+"','"+sqrq+"','"+str_Sqr+"') ";
ExecuteSql(strSql);
}
else
Response.Write("<script language='javascript'>alert('有一项或多项物品申请数量超出!');window.location.href('AddToList.aspx');</script>");
}如果有任何一条不满足都不能进行提交,该如何做?

解决方案 »

  1.   

    楼上,我用的是frame1.1,如何使用?我搜了一下,介绍的都是2.0的
      

  2.   


    一种方法,使用DataSet进行批量的更新,就是把所有的数据在本地(DataSet)更新完毕之后,再写回数据库,缺点是多人更新的时候可能造成数据冲突。
    第二种方法,
    StringBuilder sb = new StringBuilder();
    if (str_Tmp1 <= sl)//判断:如果申请数量小于或者等于在库数量,执行……
    {
        sb.Append("insert into SQ_LIST  values ('"+str_ID+"','"+djh+"','"+wpbh+"','"+str_Tmp+"','"+sqrq+"','"+str_Sqr+"') \r\n");}
    else
    {
        //err
        return;
    }
    ExecuteSql(strSql);
    把所有的sql语句拼完一起执行。缺点是有长度的限制,好像在几千个字符吧,另外,拼接字符串有可能会受到注入攻击。同样存在多人操作中的数据冲突问题。
    第三种方法,和我上一贴中的一样,不过使用SqlTranaction。
      

  3.   

    1.将你的循环插入加一个try{}catch{}finally{}结构
    2.将你操作的System.Data.SqlClient.SqlTransaction得到
    System.Data.SqlClient.SqlTransaction trans=null;
    try
    {
        trans=xxx.BeginTransaction();
        for(int ...
           ...
        trans.Commit();
    }
    catch(Exception ex)
    {
        trans.RollBack();
    }
    finally
    {
        你自己的最后操作..
        trans=null;
    }在循环之前定义一个事务,循环成功就提交,一个出错就回滚。
      

  4.   

    string str_insert = "";for(int i = 0;i < dg_Cart.Items.Count; i++)
    {
    string str_ID=dg_Cart.Items[i].Cells[1].Text;   //物品ID
    TextBox txtSL = (TextBox)dg_Cart.Items[i].FindControl("Txt_Sqsl");//申请数量,又用户输入
    string wpbh=dg_Cart.Items[i].Cells[2].Text.ToString();//物品编号
    string zksl=dg_Cart.Items[i].Cells[8].Text.ToString();//在库数量
    string str_Tmp = txtSL.Text;
    int str_Tmp1 = new int();
    str_Tmp1=int.Parse(str_Tmp);int sl=new int();
    sl=int.Parse(zksl);
    if (str_Tmp1 <= sl)//判断:如果申请数量小于或者等于在库数量,执行……
    {
        str_insert =  str_insert  + "insert into SQ_LIST  values ('"+str_ID+"','"+djh+"','"+wpbh+"','"+str_Tmp+"','"+sqrq+"','"+str_Sqr+"') ;";}
    else
    Response.Write("<script language='javascript'>alert('有一项或多项物品申请数量超出!');window.location.href('AddToList.aspx');</script>");
    return;
    }ExecuteSql(str_insert);
      

  5.   

    接上一贴
    最后 ExecuteSql(str_insert);应该写成 
    if (str_insert!="")
    {
       ExecuteSql(str_insert);
    }
      

  6.   

    在for外面加上事务,看你的写法应该是把数据库访问写成了一个类,所以在类里也应该写些支持事务的方法。
      

  7.   

    string str_insert = ""; //============================================》定义字符串for(int i = 0;i < dg_Cart.Items.Count; i++)
    {
    string str_ID=dg_Cart.Items[i].Cells[1].Text;   //物品ID
    TextBox txtSL = (TextBox)dg_Cart.Items[i].FindControl("Txt_Sqsl");//申请数量,又用户输入
    string wpbh=dg_Cart.Items[i].Cells[2].Text.ToString();//物品编号
    string zksl=dg_Cart.Items[i].Cells[8].Text.ToString();//在库数量
    string str_Tmp = txtSL.Text;
    int str_Tmp1 = new int();
    str_Tmp1=int.Parse(str_Tmp);int sl=new int();
    sl=int.Parse(zksl);
    if (str_Tmp1 <= sl)//判断:如果申请数量小于或者等于在库数量,执行……
    {
        str_insert =  str_insert  + "insert into SQ_LIST  values ('"+str_ID+"','"+djh+"','"+wpbh+"','"+str_Tmp+"','"+sqrq+"','"+str_Sqr+"') ;";
     //==============================》每句insert语句最后有分号,将语句串起来
    }
    else
    Response.Write("<script language='javascript'>alert('有一项或多项物品申请数量超出!');window.location.href('AddToList.aspx');</script>");
    return; //======================================================》退出该事件
    }
    //执行数据库操作
    if (str_insert!="")
    {
       ExecuteSql(str_insert);
    }
      

  8.   

    已经解决了
    else
    {
    Response.Write("<script language='javascript'>alert('有一项或多项物品申请数量超出!');window.location.href('AddToList.aspx');</script>");
    return;
    }加了两个大括号,呵呵