
现在就来说说这个小程序的开发思路吧。
第一步:通过 sp_helpdb系统存储过程得到SqlServer中的所有数据库名称。
复制代码 代码如下:
 
#region 测试数据库连接,并显示数据库列表 
/// <summary> 
/// 测试数据库连接,并显示数据库列表 
/// </summary> 
/// <param></param> 
/// <param></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 
复制代码 代码如下:
 
#region 当选择不同的数据库时,读取数据库的表信息 
/// <summary> 
/// 当选择不同的数据库时,读取数据库的表信息 
/// </summary> 
/// <param></param> 
/// <param></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></param> 
/// <param></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 
附带一些操作截图,希望大家可以看的更清楚一些。

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

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

哈哈,数据终于恢复原貌!!
源程序下载地址 
新闻热点
疑难解答
图片精选