zl程序教程

您现在的位置是:首页 >  后端

当前栏目

动态组合SQL语句方式实现批量更新的实例

实例批量SQL 实现 方式 语句 更新 动态
2023-06-13 09:14:47 时间

Default.aspx

复制代码代码如下:


<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Index.aspx.cs"Inherits="Index"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
   <title>供求信息网审核发布信息</title>
</head>
<bodyclass="Font">
   <formid="form1"runat="server">
   <divstyle="text-align:left"align="left"><asp:PanelID="Panel2"runat="server">
       <asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"
           OnRowDataBound="GridView1_RowDataBound"
           OnSelectedIndexChanging="GridView1_SelectedIndexChanging"Font-Size="9pt"
           AllowPaging="True"EmptyDataText="没有相关数据可以显示!"
           OnPageIndexChanging="GridView1_PageIndexChanging"CellPadding="4"
           ForeColor="#333333"GridLines="None"DataKeyNames="id">
               <Columns>
                    <asp:TemplateField>
                               <ItemTemplate>
                                   <asp:CheckBoxID="cbSingleOrMore"runat="server"/>
                               </ItemTemplate>
                     </asp:TemplateField>
                   <asp:BoundFieldDataField="id"HeaderText="信息ID"/>
                   <asp:BoundFieldDataField="name"HeaderText="信息主题"/>
                   <asp:BoundFieldDataField="type"HeaderText="信息分类"/>
                   <asp:BoundFieldDataField="content"HeaderText="发布内容"/>
                   <asp:BoundFieldDataField="userName"HeaderText="发布人"/>
                   <asp:BoundFieldDataField="lineMan"HeaderText="联系人"/>
                   <asp:BoundFieldDataField="issueDate"HeaderText="发布时间"
                       DataFormatString="{0:d}"/>
               </Columns>
               <FooterStyleBackColor="#990000"Font-Bold="True"ForeColor="White"/>
               <RowStyleBackColor="#FFFBD6"ForeColor="#333333"/>
               <SelectedRowStyleBackColor="#FFCC66"Font-Bold="True"ForeColor="Navy"/>
               <PagerStyleBackColor="#FFCC66"ForeColor="#333333"HorizontalAlign="Right"/>
               <HeaderStyleBackColor="#990000"Font-Bold="True"ForeColor="White"/>
               <AlternatingRowStyleBackColor="White"/>
           </asp:GridView>
       </asp:Panel>
                   <asp:CheckBoxID="cbAll"runat="server"AutoPostBack="True"
           Font-Size="9pt"OnCheckedChanged="cbAll_CheckedChanged"
                       Text="全选/反选"/>

       <asp:ButtonID="btnUpdateTime"runat="server"onclick="btnUpdateTime_Click"
           Text="更新发布时间"/>

   </div>
   </form>
</body>
</html>

Default.aspx.cs

复制代码代码如下:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;

usingSystem.Text;
usingSystem.Data.SqlClient;

publicpartialclassIndex:System.Web.UI.Page
{
   SqlConnectionsqlcon;
   stringstrCon=ConfigurationManager.AppSettings["conStr"];
   protectedvoidPage_Load(objectsender,EventArgse)
   {
       if(!IsPostBack)
       {
           this.GV_DataBind();
       }

   }
   publicvoidGV_DataBind()
   {
       stringsqlstr="select*fromtb_inf";
       sqlcon=newSqlConnection(strCon);
       SqlDataAdapterda=newSqlDataAdapter(sqlstr,sqlcon);
       DataSetds=newDataSet();
       sqlcon.Open();
       da.Fill(ds,"tb_inf");
       sqlcon.Close();
       this.GridView1.DataSource=ds;
       this.GridView1.DataKeyNames=newstring[]{"id"};
       this.GridView1.DataBind();
       if(GridView1.Rows.Count>0)
       {
           return;//有数据,不要处理
       }
       else//显示表头并显示没有数据的提示信息
       {
           StrHelper.GridViewHeader(GridView1);
       }
   }
   protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)
   {
       if(e.Row.RowType==DataControlRowType.DataRow)
       {
           stringgIntro=e.Row.Cells[4].Text;
           e.Row.Cells[4].Text=StrHelper.GetFirstString(gIntro,12);
       }
   }
   protectedvoidGridView1_SelectedIndexChanging(objectsender,GridViewSelectEventArgse)
   {
       stringid=this.GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
       sqlcon=newSqlConnection(strCon);
       SqlCommandcom=newSqlCommand("select[check]fromtb_infwhereid=""+id+""",sqlcon);
       sqlcon.Open();
       stringcount=Convert.ToString(com.ExecuteScalar());
       if(count=="False")
       {
           count="1";
       }
       else
       {
           count="0";
       }
       com.CommandText="updatetb_infset[check]="+count+"whereid="+id;
       com.ExecuteNonQuery();
       sqlcon.Close();
       this.GV_DataBind();
   }
   protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgse)
   {
       this.GridView1.PageIndex=e.NewPageIndex;
       this.GV_DataBind();
   }
   protectedvoidcbAll_CheckedChanged(objectsender,EventArgse)
   {
       for(inti=0;i<=GridView1.Rows.Count-1;i++)//遍历
       {
           CheckBoxcbox=(CheckBox)GridView1.Rows[i].FindControl("cbSingleOrMore");
           if(cbAll.Checked==true)
           {
               cbox.Checked=true;
           }
           else
           {
               cbox.Checked=false;
           }
       }
   }

   protectedvoidbtnUpdateTime_Click(objectsender,EventArgse)
   {
       StringBuilderbuilder=newStringBuilder();
       inti=0;
       foreach(GridViewRowrowinthis.GridView1.Rows)//循环遍历GridView控件中行,拼装IN子句
       {
           CheckBoxcbox=row.FindControl("cbSingleOrMore")asCheckBox;
           if(cbox.Checked)//判断复选框是否被选中
           {
               //当数据行中的复选框被选中时,即将该行记录的主键值放入IN子句中
               builder.AppendFormat(""{0}",",this.GridView1.DataKeys[row.RowIndex].Value.ToString());
               i++;
               continue;
           }
           continue;
       }
       if(builder.ToString().Length==0)//当IN子句中没有任何数据行,则弹出提示
       {
           StrHelper.Alert("没有选中任何数据行,请重新选择!");
           return;
       }
       //移除StringBuilder对象中的最后一个“,”
       builder.Remove(builder.ToString().LastIndexOf(","),1);
       //拼装SQL语句
       stringSqlBuilderCopy=string.Format("Updatetb_infsetissueDate="{0}"WHEREidIN({1})",DateTime.Now.ToString(),builder.ToString());
       sqlcon=newSqlConnection(strCon);//创建数据库连接
       SqlCommandsqlcom;//创建命令对象变量
       intresult=0;
       if(sqlcon.State.Equals(ConnectionState.Closed))
           sqlcon.Open();//打开数据库连接
       sqlcom=newSqlCommand(SqlBuilderCopy,sqlcon);
       SqlTransactiontran=sqlcon.BeginTransaction();//实例化事务,注意实例化事务必须在数据库连接开启状态下
       sqlcom.Transaction=tran;//将命令对象与连接对象关联
       try
       {
           result=sqlcom.ExecuteNonQuery();//接收影响的行数
           tran.Commit();//提交事务
       }
       catch(SqlExceptionex)
       {
           StrHelper.Alert(string.Format("SQL语句发生了异常,异常如下所示:\n{0}",ex.Message));
           tran.Rollback();//出现异常,即回滚事务,防止出现脏数据
           return;
       }
       finally
       {
           sqlcon.Close();
       }
       if(result==i)//判断影响行数是否等于选中的数据行
       {
           StrHelper.Alert("数据更新成功!");
       }
       else
       {
           StrHelper.Alert("数据更新失败,事务已回滚!");
       }
       GV_DataBind();//重新绑定控件数据
       return;
   }
}

StrHelper.cs

复制代码代码如下:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Xml.Linq;
//引入如下命名空间
usingSystem.Text.RegularExpressions;
usingSystem.Text;

///<summary>
///StrHelper的摘要说明
///</summary>
publicclassStrHelper
{
   publicStrHelper(){}
   ///<summary>
   ///截取字符串函数
   ///</summary>
   ///<paramname="str">所要截取的字符串</param>
   ///<paramname="num">截取字符串的长度</param>
   ///<returns></returns>
   staticpublicstringGetSubString(stringstr,intnum)
   {
       #region
       return(str.Length>num)?str.Substring(0,num)+"...":str;
       #endregion
   }
   ///<summary>
   ///截取字符串优化版
   ///</summary>
   ///<paramname="stringToSub">所要截取的字符串</param>
   ///<paramname="length">截取字符串的长度</param>
   ///<returns></returns>
   publicstaticstringGetFirstString(stringstringToSub,intlength)
   {
       #region
       Regexregex=newRegex("[\u4e00-\u9fa5]+",RegexOptions.Compiled);
       char[]stringChar=stringToSub.ToCharArray();
       StringBuildersb=newStringBuilder();
       intnLength=0;
       boolisCut=false;
       for(inti=0;i<stringChar.Length;i++)
       {
           if(regex.IsMatch((stringChar[i]).ToString()))//regex.IsMatch指示正则表达式在输入字符串中是否找到匹配项
           {
               sb.Append(stringChar[i]);//将信息追加到当前StringBuilder的结尾
               nLength+=2;
           }
           else
           {
               sb.Append(stringChar[i]);
               nLength=nLength+1;
           }
           if(nLength>length)//替换字符串
           {
               isCut=true;
               break;
           }
       }
       if(isCut)
           returnsb.ToString()+"...";
       else
           returnsb.ToString();
       #endregion
   }
   ///弹出JavaScript小窗口
   ///</summary>
   ///<paramname="js">窗口信息</param>
   publicstaticvoidAlert(stringmessage)
   {
       #region
       stringjs=@"<Scriptlanguage="JavaScript">
                   alert(""+message+"");</Script>";
       HttpContext.Current.Response.Write(js);

       #endregion
   }
   publicstaticvoidGridViewHeader(GridViewgdv)//显示表头并显示没有数据的提示信息
   {
       //表头的设置
       GridViewRowrow=newGridViewRow(-1,-1,DataControlRowType.EmptyDataRow,DataControlRowState.Normal);
       foreach(DataControlFieldfieldingdv.Columns)
       {
           TableCellcell=newTableCell();
           cell.Text=field.HeaderText;
           cell.Width=field.HeaderStyle.Width;
           cell.Height=field.HeaderStyle.Height;
           cell.ForeColor=field.HeaderStyle.ForeColor;
           cell.Font.Size=field.HeaderStyle.Font.Size;
           cell.Font.Bold=field.HeaderStyle.Font.Bold;
           cell.Font.Name=field.HeaderStyle.Font.Name;
           cell.Font.Strikeout=field.HeaderStyle.Font.Strikeout;
           cell.Font.Underline=field.HeaderStyle.Font.Underline;
           cell.BackColor=field.HeaderStyle.BackColor;
           cell.VerticalAlign=field.HeaderStyle.VerticalAlign;
           cell.HorizontalAlign=field.HeaderStyle.HorizontalAlign;
           cell.CssClass=field.HeaderStyle.CssClass;
           cell.BorderColor=field.HeaderStyle.BorderColor;
           cell.BorderStyle=field.HeaderStyle.BorderStyle;
           cell.BorderWidth=field.HeaderStyle.BorderWidth;
           row.Cells.Add(cell);
       }
       TableItemStyleheadStyle=gdv.HeaderStyle;
       TableItemStyleemptyStyle=gdv.EmptyDataRowStyle;
       emptyStyle.Width=headStyle.Width;
       emptyStyle.Height=headStyle.Height;
       emptyStyle.ForeColor=headStyle.ForeColor;
       emptyStyle.Font.Size=headStyle.Font.Size;
       emptyStyle.Font.Bold=headStyle.Font.Bold;
       emptyStyle.Font.Name=headStyle.Font.Name;
       emptyStyle.Font.Strikeout=headStyle.Font.Strikeout;
       emptyStyle.Font.Underline=headStyle.Font.Underline;
       emptyStyle.BackColor=headStyle.BackColor;
       emptyStyle.VerticalAlign=headStyle.VerticalAlign;
       emptyStyle.HorizontalAlign=headStyle.HorizontalAlign;
       emptyStyle.CssClass=headStyle.CssClass;
       emptyStyle.BorderColor=headStyle.BorderColor;
       emptyStyle.BorderStyle=headStyle.BorderStyle;
       emptyStyle.BorderWidth=headStyle.BorderWidth;
       //空白行的设置
       GridViewRowrow1=newGridViewRow(0,-1,DataControlRowType.EmptyDataRow,DataControlRowState.Normal);
       TableCellcell1=newTableCell();
       cell1.Text="没有相关数据可以显示!";
       cell1.BackColor=System.Drawing.Color.White;
       row1.Cells.Add(cell1);
       cell1.ColumnSpan=6;//合并列
       if(gdv.Controls.Count==0)
       {
           gdv.Page.Response.Write("<scriptlanguage="javascript">alert("必须在初始化表格类之前执行DataBind方法并设置EmptyDataText属性不为空!");</script>");
       }
       else
       {
           gdv.Controls[0].Controls.Clear();
           gdv.Controls[0].Controls.AddAt(0,row);
           gdv.Controls[0].Controls.AddAt(1,row1);
       }
   }
}