sqlserver 批量數(shù)據(jù)替換助手V1.0版發(fā)布
現(xiàn)在就來說說這個(gè)小程序的開發(fā)思路吧。
第一步:通過 sp_helpdb系統(tǒng)存儲(chǔ)過程得到SqlServer中的所有數(shù)據(jù)庫名稱。
#region 測試數(shù)據(jù)庫連接,并顯示數(shù)據(jù)庫列表
/// <summary>
/// 測試數(shù)據(jù)庫連接,并顯示數(shù)據(jù)庫列表
/// </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("錯(cuò)誤:{0}!",ex.Message),"錯(cuò)誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
this.btnTest.Enabled = true;
}
}
#endregion
第二步:當(dāng)選擇某個(gè)數(shù)據(jù)庫時(shí)得到數(shù)據(jù)庫里面的所有表信息,通過下面Sql語句就可以查詢到了。
select [name] from sysobjects where xtype='u' order by [name] asc
#region 當(dāng)選擇不同的數(shù)據(jù)庫時(shí),讀取數(shù)據(jù)庫的表信息
/// <summary>
/// 當(dāng)選擇不同的數(shù)據(jù)庫時(shí),讀取數(shù)據(jù)庫的表信息
/// </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
第三步:當(dāng)點(diǎn)擊替換按鈕時(shí)獲取被選中表的信息,并遍歷表中的行列信息,并進(jìn)行查找替換。
#region 執(zhí)行批量替換操作
/// <summary>
/// 執(zhí)行批量替換操作
/// </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("當(dāng)前查找內(nèi)容為空,確認(rèn)此操作?", "提示", 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; //沒有符合檢測的數(shù)據(jù)表
pBar1.Visible = true;
pBar1.Minimum = 1;
pBar1.Maximum = tabList.Count;
pBar1.Value = 1;
pBar1.Step = 1;
//循環(huán)過濾表中要替換的數(shù)據(jù)
foreach (TableInfo info in tabList)
{
FilterInfo.Execute(info, searchString, replaceString, kt);
pBar1.PerformStep(); //進(jìn)度條
}
}
catch (Exception ex)
{
MessageBox.Show(string.Format("異常:{0}", ex.Message), "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
finally
{
this.ExecuteFilterBtn.Enabled = true;
}
MessageBox.Show(string.Format("數(shù)據(jù)替換完畢,共有{0}行數(shù)據(jù)被修改!",total),"消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion
以上就是整個(gè)大致思路,詳情可以參看源代碼。
附帶一些操作截圖,希望大家可以看的更清楚一些。
這個(gè)就是被注入的數(shù)據(jù),當(dāng)然實(shí)際的會(huì)有區(qū)別。
編寫查找內(nèi)容,并啟用正則匹配功能。
哈哈,數(shù)據(jù)終于恢復(fù)原貌??!
源程序下載地址
相關(guān)文章
asp.net下降文本格式數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中的代碼
導(dǎo)入文本格式數(shù)據(jù)到數(shù)據(jù)庫中的代碼,需要的朋友可以參考下。2010-05-05asp.net中virtual和abstract的區(qū)別分析
這篇文章主要介紹了asp.net中virtual和abstract的區(qū)別,較為詳細(xì)的分析了virtual與abstract的概念與具體用法,并以實(shí)例的形式予以總結(jié)歸納,需要的朋友可以參考下2014-10-10ASP.NET使用SignalR2實(shí)現(xiàn)服務(wù)器廣播
這篇文章介紹了ASP.NET使用SignalR2實(shí)現(xiàn)服務(wù)器廣播的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05FileUpload1 上傳文件類型驗(yàn)證正則表達(dá)式
FileUpload1 上傳文件類型驗(yàn)證正則表達(dá)式...2006-10-10asp.net(c#)復(fù)數(shù)類(復(fù)數(shù)加減乘除四則運(yùn)算)
asp.net(c#)復(fù)數(shù)類(復(fù)數(shù)加減乘除四則運(yùn)算)...2007-06-06