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

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

  Default.aspx

  

复制代码 代码如下:

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

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml" >

  <head runat="server">

  <title>供求信息网审核发布信息</title>

  </head>

  <body class="Font">

  <form id="form1" runat="server">

  <div style="text-align: left" align="left"><asp:Panel ID="Panel2" runat="server">

  <asp:GridView ID="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:CheckBox ID="cbSingleOrMore" runat="server" />

  </ItemTemplate>

  </asp:TemplateField>

  <asp:BoundField DataField="id" HeaderText="信息ID" />

  <asp:BoundField DataField="name" HeaderText="信息主题" />

  <asp:BoundField DataField="type" HeaderText="信息分类" />

  <asp:BoundField DataField="content" HeaderText="发布内容" />

  <asp:BoundField DataField="userName" HeaderText="发布人" />

  <asp:BoundField DataField="lineMan" HeaderText="联系人" />

  <asp:BoundField DataField="issueDate" HeaderText="发布时间"

  DataFormatString="{0:d}" />

  </Columns>

  <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

  <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />

  <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />

  <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Right" />

  <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

  <AlternatingRowStyle BackColor="White" />

  </asp:GridView>

  </asp:Panel>

  <asp:CheckBox ID="cbAll" runat="server" AutoPostBack="True"

  Font-Size="9pt" OnCheckedChanged="cbAll_CheckedChanged"

  Text="全选/反选" />

  <asp:Button ID="btnUpdateTime" runat="server" onclick="btnUpdateTime_Click"

  Text="更新发布时间" />

  </div>

  </form>

  </body>

  </html>

  Default.aspx.cs

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Collections;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using System.Text;

  using System.Data.SqlClient;

  public partial class Index : System.Web.UI.Page

  {

  SqlConnection sqlcon;

  string strCon = ConfigurationManager.AppSettings["conStr"];

  protected void Page_Load(object sender, EventArgs e)

  {

  if (!IsPostBack)

  {

  this.GV_DataBind();

  }

  }

  public void GV_DataBind()

  {

  string sqlstr = "select * from tb_inf";

  sqlcon = new SqlConnection(strCon);

  SqlDataAdapter da = new SqlDataAdapter(sqlstr, sqlcon);

  DataSet ds = new DataSet();

  sqlcon.Open();

  da.Fill(ds, "tb_inf");

  sqlcon.Close();

  this.GridView1.DataSource = ds;

  this.GridView1.DataKeyNames = new string[] { "id" };

  this.GridView1.DataBind();

  if (GridView1.Rows.Count > 0)

  {

  return;//有数据,不要处理

  }

  else//显示表头并显示没有数据的提示信息

  {

  StrHelper.GridViewHeader(GridView1);

  }

  }

  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

  {

  if (e.Row.RowType == DataControlRowType.DataRow)

  {

  string gIntro = e.Row.Cells[4].Text;

  e.Row.Cells[4].Text = StrHelper.GetFirstString(gIntro, 12);

  }

  }

  protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)

  {

  string id = this.GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();

  sqlcon = new SqlConnection(strCon);

  SqlCommand com = new SqlCommand("select [check] from tb_inf where id='" + id + "'", sqlcon);

  sqlcon.Open();

  string count = Convert.ToString(com.ExecuteScalar());

  if (count == "False")

  {

  count = "1";

  }

  else

  {

  count = "0";

  }

  com.CommandText = "update tb_inf set [check]=" + count + " where id=" + id;

  com.ExecuteNonQuery();

  sqlcon.Close();

  this.GV_DataBind();

  }

  protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

  {

  this.GridView1.PageIndex = e.NewPageIndex;

  this.GV_DataBind();

  }

  protected void cbAll_CheckedChanged(object sender, EventArgs e)

  {

  for (int i = 0; i <= GridView1.Rows.Count - 1; i++)//遍历

  {

  CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("cbSingleOrMore");

  if (cbAll.Checked == true)

  {

  cbox.Checked = true;

  }

  else

  {

  cbox.Checked = false;

  }

  }

  }

  protected void btnUpdateTime_Click(object sender, EventArgs e)

  {

  StringBuilder builder = new StringBuilder();

  int i = 0;

  foreach (GridViewRow row in this.GridView1.Rows)//循环遍历GridView控件中行,拼装IN子句

  {

  CheckBox cbox = row.FindControl("cbSingleOrMore") as CheckBox;

  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语句

  string SqlBuilderCopy = string.Format("Update tb_inf set issueDate='{0}' WHERE id IN ({1})", DateTime.Now.ToString(), builder.ToString());

  sqlcon = new SqlConnection(strCon);//创建数据库连接

  SqlCommand sqlcom;//创建命令对象变量

  int result = 0;

  if (sqlcon.State.Equals(ConnectionState.Closed))

  sqlcon.Open();//打开数据库连接

  sqlcom = new SqlCommand(SqlBuilderCopy, sqlcon);

  SqlTransaction tran = sqlcon.BeginTransaction();//实例化事务,注意实例化事务必须在数据库连接开启状态下

  sqlcom.Transaction = tran;//将命令对象与连接对象关联

  try

  {

  result = sqlcom.ExecuteNonQuery();//接收影响的行数

  tran.Commit();//提交事务

  }

  catch (SqlException ex)

  {

  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

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Linq;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.HtmlControls;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Xml.Linq;

  //引入如下命名空间

  using System.Text.RegularExpressions;

  using System.Text;

  /// <summary>

  ///StrHelper 的摘要说明

  /// </summary>

  public class StrHelper

  {

  public StrHelper(){}

  /// <summary>

  /// 截取字符串函数

  /// </summary>

  /// <param name="str">所要截取的字符串</param>

  /// <param name="num">截取字符串的长度</param>

  /// <returns></returns>

  static public string GetSubString(string str, int num)

  {

  #region

  return (str.Length > num) ? str.Substring(0, num) + "..." : str;

  #endregion

  }

  /// <summary>

  /// 截取字符串优化版

  /// </summary>

  /// <param name="stringToSub">所要截取的字符串</param>

  /// <param name="length">截取字符串的长度</param>

  /// <returns></returns>

  public static string GetFirstString(string stringToSub, int length)

  {

  #region

  Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);

  char[] stringChar = stringToSub.ToCharArray();

  StringBuilder sb = new StringBuilder();

  int nLength = 0;

  bool isCut = false;

  for (int i = 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)

  return sb.ToString() + "...";

  else

  return sb.ToString();

  #endregion

  }

  /// 弹出JavaScript小窗口

  /// </summary>

  /// <param name="js">窗口信息</param>

  public static void Alert(string message)

  {

  #region

  string js = @"<Script language='JavaScript'>

  alert('" + message + "');</Script>";

  HttpContext.Current.Response.Write(js);

  #endregion

  }

  public static void GridViewHeader(GridView gdv)//显示表头并显示没有数据的提示信息

  {

  //表头的设置

  GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);

  foreach (DataControlField field in gdv.Columns)

  {

  TableCell cell = new TableCell();

  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);

  }

  TableItemStyle headStyle = gdv.HeaderStyle;

  TableItemStyle emptyStyle = 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;

  //空白行的设置

  GridViewRow row1 = new GridViewRow(0, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);

  TableCell cell1 = new TableCell();

  cell1.Text = "没有相关数据可以显示!";

  cell1.BackColor = System.Drawing.Color.White;

  row1.Cells.Add(cell1);

  cell1.ColumnSpan = 6;//合并列

  if (gdv.Controls.Count == 0)

  {

  gdv.Page.Response.Write("<script language='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);

  }

  }

  }