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

 更新时间:2021年9月22日 10:16  点击:2130

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

[!--infotagslink--]

相关文章

  • mysql中获取一天、一周、一月时间数据的各种sql语句写法

    创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31
  • C#实现String字符串转化为SQL语句中的In后接的参数详解

    在本篇文章中小编给大家分享的是一篇关于C#实现String字符串转化为SQL语句中的In后接的实例内容和代码,需要的朋友们参考下。...2020-06-25
  • SQL语句中的一些参数如何用变量来代替?

    可以采用exec方法 declare @tempStr varchar(350) select @tempStr='Update weekcount set [' convert(varchar,@week) ']=[' convert(varchar,@week) '] 1 where us...2016-11-25
  • Android开发教程sql语句(SQLite)使用详解

    sql语句是指我们在安卓开发中会经常碰到有大量的地方要查询数据库了,下面我来介绍在安卓中使用sql语句吧。 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管...2016-09-20
  • 在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据

    GridView控件内置的编辑功能只能对每行进行编辑,做不到批量编辑。为此,我们需要将GridView里的列转换为TemplateFields,通过一个单独的“Update All”按钮,在按钮的事件中批量处理每一行。...2021-09-22
  • 动态组合SQL语句方式实现批量更新的实例

    动态组合SQL语句方式实现批量更新的实例,需要的朋友可以参考一下...2021-09-22
  • 找出mysql中like模糊查询效率低的sql语句

    mysql中like模糊查询效率低我相信各位是知道的了,小编40w数据使用like非常的慢了,后来直接使用了分表才解决这个问题了,下面我们来看找出mysql中like模糊查询效率低的sql...2016-11-25
  • 帝国CMS批量提取新闻正文内容的第一张图片作为标题缩略图的SQL语句

    执行以下脚本的时候请 先备份数据库!文本存放的新闻正文字段不可用! 新闻正文字段作为主表的情况用以下语句: update phome_ecms_news set titlepic =concat(replace(SUBST...2016-05-08
  • SQL高手篇:精妙SQL语句介绍

      说明:复制表(只复制结构,源表名:a 新表名:b)   SQL: select * into b from a where 1<>1      说明:拷贝表(拷贝数据,源表名:a 目标表名:b)   SQL: insert i...2016-11-25
  • 国CMS常用的SQL语句大全(让您事半功倍)

    懂得sql语句的朋友们自然来说简章,但对像我们这些不太懂的站长们自然是很费尽,用尽百度的各种搜索也不一定能搞定,在此我收集整理了一些帝国里常用的SQL语句,相信这些好东西会站...2015-12-30
  • Yii调试查看执行SQL语句的方法

    php怎么用调试模式查看sql语句?本文介绍了Yii调试查看执行SQL语句的方法,非常实用,有需要的同学可以参考一下 本文实例讲述了Yii调试查看执行SQL语句的方法。分享给...2017-07-06
  • php mysqli批量执行sql语句程序代码

    本文章来给各位同学介绍PHP mysqli批量执行sql语句程序代码,有需要了解的朋友可参考参考。 mysqli 增强-批量执行sql 语句 代码如下 复制代码 ...2016-11-25
  • 简化SQL语句一例

    举个例子,设表名为bbs 回复数的字段为renum 变量名$renum 记录序号字段为id 变量名$id 当我们在论坛回贴时会要改写主贴的回复数,传统的方法要用到到两句SQL语句: //...2016-11-25
  • C#中实现一次执行多条带GO的sql语句实例

    这篇文章主要介绍了C#中实现一次执行多条带GO的sql语句,以实例形式较为详细的分析了C#执行sql语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获得所有表信息的SQL语句

    exec sp_MSForEachTable @precommand=N' create table ##( id int identity, 表名 sysname, 字段数 int, 记录数 int, 保留空间 Nvarchar(10), 使用空间 varchar(10)...2016-11-25
  • ACCESS:跨数据库查询的SQL语句

    问题说明: 有时需要在两个或三个数据库的表中,通过相关关键字,查询获取所需记录集,用一般的SQL查询语句是实现不了的,可通过ACCESS的跨库查询功能实现。   解决方法:...2016-11-25
  • C#中验证sql语句是否正确(不执行语句)

    C#中验证sql语句是否正确(不执行语句),需要的朋友可以参考一下...2020-06-25
  • php与mysql mysql_connect并执行SQL语句

    新手初试,还请各路高手多多指导。 程序源代码如下: <?php $conn = mysql_connect("localhost","root","") or die ("wrong!"); $sel=mysql_select_db("mydb",$conn);...2016-11-25
  • 关于MYSQL语句存在注入漏洞的写法

    SQL Injection with MySQL 本文作者:angel 文章性质:原创 发布日期:2004-09-16 本文已经发表在《黑客防线》7月刊,转载请注明。由于写了很久,随着技术...2016-11-25
  • MySQL常用基本SQL语句总结

    这篇文章主要介绍了MySQL常用基本SQL语句总结 的相关资料,需要的朋友可以参考下...2016-08-23