sqlserver 批量数据替换助手V1.0版发布

这种方法操作繁琐,而且一般不是很懂数据库的人很难操作。于萌发了要写一个小程序的念头,经过两天时间的折腾这个小软件终于和各位见面了,希望各位童鞋多给点意见。说了这么些之后还是先上界面吧,^..^

现在就来说说这个小程序的开发思路吧。
第一步:通过 sp_helpdb系统存储过程得到SqlServer中的所有数据库名称。


代码如下:

#region 测试数据库连接,并显示数据库列表
/// <summary>
/// 测试数据库连接,并显示数据库列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnTest_Click(object sender, EventArgs e)
{
this.btnTest.Enabled = false;
saveConfig();

ConfigInfo.Server = this.txtIP.Text.Trim();
ConfigInfo.DataBase = "master";
ConfigInfo.UID = this.txtUID.Text.Trim();
ConfigInfo.Pwd = this.txtPwd.Text.Trim();

try
{
DataTable dt = Data.SqlHelper.ExecuteDataset(ConfigInfo.getConnect(), CommandType.Text, "sp_helpdb").Tables[0];

this.cmbDataBaseList.DataSource = dt;
this.cmbDataBaseList.DisplayMember = "name";
this.cmbDataBaseList.SelectedIndex = 0;
this.cmbDataBaseList.DropDownStyle = ComboBoxStyle.DropDownList;

this.ExecuteFilterBtn.Enabled = true;
}
catch (Exception ex)
{
this.ExecuteFilterBtn.Enabled = false;
MessageBox.Show(string.Format("错误:{0}!",ex.Message),"错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
this.btnTest.Enabled = true;
}
}
#endregion

第二步:当选择某个数据库时得到数据库里面的所有表信息,通过下面Sql语句就可以查询到了。
select [name] from sysobjects where xtype='u' order by [name] asc

代码如下:

#region 当选择不同的数据库时,读取数据库的表信息
/// <summary>
/// 当选择不同的数据库时,读取数据库的表信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
this.chkboxTableList.Items.Clear();
ConfigInfo.DataBase = ((DataRowView)this.cmbDataBaseList.SelectedItem)["name"].ToString();
DataSet ds = Data.SqlHelper.ExecuteDataset(ConfigInfo.getConnect(), CommandType.Text, "select [name] from sysobjects where xtype='u' order by [name] asc");

foreach (DataRow row in ds.Tables[0].Rows)
{
this.chkboxTableList.Items.Add(row["name"].ToString());
}
}
#endregion

第三步:当点击替换按钮时获取被选中表的信息,并遍历表中的行列信息,并进行查找替换。

代码如下:

#region 执行批量替换操作
/// <summary>
/// 执行批量替换操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ExecuteFilterBtn_Click(object sender, EventArgs e)
{
saveConfig();
total = 0;
if (this.chkboxTableList.CheckedIndices.Count == 0) return; //没有选中任何表的情况
if (this.txtSearchKey.Text.Trim() == "")
{
DialogResult result = MessageBox.Show("当前查找内容为空,确认此操作?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
if (result == DialogResult.No) return;
}

this.ExecuteFilterBtn.Enabled = false;

List<TableInfo> tabList = new List<TableInfo>();
string searchString = this.txtSearchKey.Text.Trim() == "" ? " " : this.txtSearchKey.Text;
string replaceString = this.txtReplaceStr.Text;
KeyType kt = this.chkIsRegex.Checked == true ? KeyType.Regex : KeyType.Text;
bool isRegex = this.chkIsRegex.Checked;

//得到被选中表的基本信息,并添加到集合中
foreach (int index in this.chkboxTableList.CheckedIndices)
{
string tabName = this.chkboxTableList.Items[index].ToString();
TableInfo tInfo = FilterInfo.initTableInfo(tabName);
if (tInfo == null)
{
continue;
}
tabList.Add(tInfo);
}

try
{
if (tabList.Count == 0) return; //没有符合检测的数据表

pBar1.Visible = true;
pBar1.Minimum = 1;
pBar1.Maximum = tabList.Count;
pBar1.Value = 1;
pBar1.Step = 1;

//循环过滤表中要替换的数据
foreach (TableInfo info in tabList)
{
FilterInfo.Execute(info, searchString, replaceString, kt);
pBar1.PerformStep(); //进度条
}
}
catch (Exception ex)
{
MessageBox.Show(string.Format("异常:{0}", ex.Message), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
finally
{
this.ExecuteFilterBtn.Enabled = true;
}

MessageBox.Show(string.Format("数据替换完毕,共有{0}行数据被修改!",total),"消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion

以上就是整个大致思路,详情可以参看源代码。

附带一些操作截图,希望大家可以看的更清楚一些。

这个就是被注入的数据,当然实际的会有区别。

编写查找内容,并启用正则匹配功能。

哈哈,数据终于恢复原貌!!
源程序下载地址

(0)

相关推荐

  • sqlserver replace函数 批量替换数据库中指定字段内指定字符串参考方法

    语法 REPLACE ( 'string_e­xpression1' , 'string_e­xpression2' , 'string_e­xpression3' ) 参数说明 'string_e­xpression1' 待搜索的字符串表达式.string_e­xpression1 可以是字符数据或二进制数据. 'string_e­xpression2' 待查找的字符串表达式.string_e­xpression2 可以是字符数据或二进制数据. 'string_e­xpression3' 替换

  • SQL Server中对数据截取替换的方法详解

    REPLACE(要修改字段名,'被替换的特定字符','替换的字符') 表结构和插入数据 CREATE DATABASE TEST GO USE TEST GO CREATE TABLE TestTable ( UserName VARCHAR(50), UserPwd VARCHAR(50) ) GO INSERT INTO TestTable (UserName,UserPwd) VALUES ('ASDFFFF','WWWEEE') INSERT INTO TestTable (UserNa

  • 批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码

    首先备份数据库,以防不必要的损失.而后对所有被挂马的小于8000字符的varchar字段执行 复制代码 代码如下: update 表名 set 字段名=replace(字段名,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','') 其中<Script Src=http://c.n%75clear3.com/css/c.js></Script>为挂马字段.执行后挂马字段被清除.但是有部分字段,比

  • SqlServer中批量替换被插入的木马记录

    最近找了找 批量替换被插入的木马记录,找到了一条好的语句,用处很大,仅仅使用十几行游标语句,把整个数据库的所有表的恶 意木马清除掉了,而且在Google搜索到此记录几率很小,在此专门转载一下!为了以后自己能找得到,也希望后人能得到帮助. 原文如下: 复制代码 代码如下: declare @t varchar(555),@c varchar(555) ,@inScript varchar(8000) set @inScript='恶意代码' declare table_cursor cursor

  • sqlserver 中ntext字段的批量替换(updatetext的用法)

    一.问题描述: 1.在Sql Server 中,ntext/text/image 字段不允许应用replace函数替换内容: 2.通过convert字段转换,可以把ntext字段转换为varchar(8000),然后用Relpace函数替换,不过,此方法,对于字段长度大于8000的ntext字段无效. 二.问题解决 整理通用存储过程,代码如下: 复制代码 代码如下: CREATE procedure [dbo].[Proc_UpdateNTextField] @TargetTable nvarc

  • sqlserver 批量数据替换助手V1.0版发布

    这种方法操作繁琐,而且一般不是很懂数据库的人很难操作.于萌发了要写一个小程序的念头,经过两天时间的折腾这个小软件终于和各位见面了,希望各位童鞋多给点意见.说了这么些之后还是先上界面吧,^..^ 现在就来说说这个小程序的开发思路吧.第一步:通过 sp_helpdb系统存储过程得到SqlServer中的所有数据库名称. 复制代码 代码如下: #region 测试数据库连接,并显示数据库列表 /// <summary> /// 测试数据库连接,并显示数据库列表 /// </summary>

  • Omi v1.0.2发布正式支持传递javascript表达式

    写在前面 Omi框架可以通过在组件上声明 data-* 把属性传递给子节点. Omi从设计之初,就是往标准的DOM标签的标准传递方式靠齐.比如: 下划线自动转驼峰, data-page-index传到子组件就变成this.data.pageIndex data-xx 传递到子节点全都变成字符串,如data-page-index="1"到子节点中this.data.pageIndex就是字符串"1" 这样会有什么局限性和问题?如: 无法传递JSON 无法传递numbe

  • NCC Tools(never code counter tools) V1.0.1发布代码-代码统计工具

    界面如下图:把源代码存为(hta)文件,因为hta文件没有状态栏,所以我这里建议大家存为html文件,这样可以在状态栏下看到 NCC扫描的进度,我这里把NCC的maxloop设置为3000,所以文件统计到3000的时候,会自动终止,以防文件夹中文件太多造成运行的负担. 如果大家喜欢这样的代码,就请关注"Never Modules" 主要功能有- 1.可自己选择文件夹,或者单个文件. 2.自己选择文件后缀名进行统计 3.output information输出的数据有: 文件个数, 文件

  • 一想千开PJblog审核功能补丁 v2.0版 发布第1/3页

    这次这个补丁,应该说和上和是没有多少关系的,是完全重新编写的.但为了不和上次发布的那个补丁混淆,给这个补丁加个版本号2.0. 一.PJblog审核功能补丁v2.0对PJblog功能上的改进 1.重大改进:一想千开首创"敏感字"概念并引入应用到PJblog审核功能补丁v2.0 什么是"敏感字"?一想千开对"敏感字"的定义是这样的:含有"敏感字"的言论有可能是非法言论,也有可能是正常言论.这类词语我们不能直接加进"过滤关

  • blog程序新版本V2.0 Beta完成,提供V1.0全部源码下载

    旧版本:v1.0 基本用vs2003和asp.net的Web控件完成,配合access数据库可实现web2.0的blog功能 现提供下载,注意事项: 1.源程序用于学习和研究asp.net之用,请不要用于商业. 2.本blog不提供v1.0版的技术支持!交流请email:iceok&163.com(&换@)给我 3.新版本现不提供源码,请不要索取! 4.谢谢大家的支持! 点击此处下载v1.0 新版本v2.0 改进v1.0版本,采用MS-Sql2000为数据库配合存储过程,当然access数

  • 字符批量替换程序asp服务器版

    **********字符批量替换程序asp服务器版****************** 安装方法:直接把replace.asp文件放在任意的支持asp+FSO的环境中 运行方法:用http://localhost/.../replace.asp访问即可看到程序的效果 此程序的功能主要用来替换文件夹中所有文本文件字符用的. 如:txt.htm.asp.jsp.php.-- 一切的文本文件 div+CSS布局  兼容FF和IE浏览器 ---------目前具有功能------------------

  • python 批量修改/替换数据的实例

    在进行数据操作时,经常会根据条件批量的修改数据,如以下数据,按照日期的条件,将部门日期下的promotion改为1 tot_qty price date price_delta1 price_delta2 price_delta3 promotion created_date 20160419 1.0 5.410000 20160419 NaN NaN NaN 0 20161111 96.0 5.400000 20161111 -0.010000 NaN NaN 1 20161123 1.0 7

  • SQLServer批量插入数据的三种方式及性能对比

    昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文. 公司技术背景:数据库访问类(xxx.DataBase.Dll)调用存储过程实现数据库的访问. 技术方案一: 压缩时间下程序员写出的第一个版本,仅仅为了完成任务,没有从程序上做任何优化,实现方式是利用数据库访问类调用存储过程,利用循环逐条插入.很明显,这种方式效率并不高,于是有了前面的两位同事讨论效率低的问题. 技术方案二: 由于是考虑到大数据量的批量

  • Docker v1.13.0 正式版发布

    Docker v1.13.0 正式版发布了. 重要信息:在 Docker 1.13 中,与在 Docker 1.12 中引入的实验版本相比,管理插件 api 发生了变化.在升级到 Docker 1.13 之前,必须卸载使用 Docker 1.12 安装的插件.可通过  docker plugin rm 命令卸载插件. 如果已经升级到 Docker 1.13 而不卸载先前安装的插件,则当 Docker 守护程序启动时,可能会看到此消息 Error starting daemon: json: ca

  • SQLServer批量更新两个关联表数据的方法

    本文实例讲述了SQLServer批量更新两个关联表数据的方法.分享给大家供大家参考,具体如下: 方式1: UPDATE a SET WtNo=b.NO from WT_Task a INNER JOIN WT_BasicInformation b ON a.WtId=b.ID; 方式2: UPDATE a SET a.WtNo=b.NO FROM WT_Task a,WT_BasicInformation b WHERE a.WtId=b.ID; 希望本文所述对大家SQL Server数据库程序

随机推荐