进行数据库跟踪分析的工具

来源:互联网 发布:win10输入网络凭证 编辑:程序博客网 时间:2024/06/04 01:20

笔者以SQLServer为例,写了个分析数据库的工具,下边的是主要代码:

Form1.cs

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;using System.Threading;using System.Data.SqlClient;namespace Database_tracking{    public partial class Form1 : Form    {        private int ThreadState = 1;//Thread运行状态,0为运行,1停止                 private string configPath = Application.StartupPath + "\\config.ini";        /****操作INI文件开始***********/        [System.Runtime.InteropServices.DllImport("kernel32")]        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);        // 声明INI文件的读操作函数 GetPrivateProfileString()        [System.Runtime.InteropServices.DllImport("kernel32")]        private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);        public string ReadValue(string section, string key)        {            // 每次从ini中读取多少字节            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);            // section=配置节,key=键名,temp=上面,path=路径            GetPrivateProfileString(section, key, "", temp, 255, configPath);            return temp.ToString();        }        public void Writue(string section, string key, string value)        {            // section=配置节,key=键名,value=键值,path=路径            WritePrivateProfileString(section, key, value, configPath);        }        /*****操作INI文件结束**********/                public Form1()        {            InitializeComponent();            this.FormClosing += new FormClosingEventHandler(Form1_Closing);        }        private void Form1_Closing(object sender, FormClosingEventArgs e)        {            if (this.ThreadState != 1)            {                MessageBox.Show("Please stop all the thread first.");                e.Cancel = true;            }            else            {                for (int i = 0; i < mThread.Length; i++)                {                    if (mThread[i] != null)                    {                        if (mThread[i].IsAlive==true)                        {                            mThread[i].Abort();                        }                    }                }                this.Dispose();            }        }        //private ArrayList mThread=new ArrayList();        private Thread[] mThread;        private void button2_Click(object sender, EventArgs e)        {            //开始执行            if (button2.Text == "Start")            {                SetText("Starting...");                ThreadState = 0;                listView1.Items.Clear();                cDataIndex = 0;                lCount = 0;                //启动线程                SetObjectStatus(false, button1);                SetObjectStatus(false, button3);                if (mDataBase.Length <= int.Parse(MyModel.ThreadCount))                {                    MyModel.ThreadCount = mDataBase.Length.ToString();                }                ChangeValue("Stop");                for (int i = 0; i < int.Parse(MyModel.ThreadCount); i++)                {                    mThread[i] = new Thread(ThreadWork);                    mThread[i].IsBackground = true;                    mThread[i].Name = i.ToString();                    mThread[i].Start();                }            }            else            {                ThreadState = 1;                ChangeValue("Start");            }        }        private void button1_Click(object sender, EventArgs e)        {            Config s = new Config();            s.ShowDialog();        }        private string[] mDataBase;        private int cDataIndex = 0;//当前运行的数字        private void Form1_Load(object sender, EventArgs e)        {            MyModel.MasterServer = ReadValue("Main", "MasterServer");            MyModel.MasterUid = ReadValue("Main", "MasterUid");            MyModel.MasterPwd = ReadValue("Main", "MasterPwd");            MyModel.MirrorServer = ReadValue("Main", "MirrorServer");            MyModel.MirrorUid = ReadValue("Main", "MirrorUid");            MyModel.MirrorPwd = ReadValue("Main", "MirrorPwd");            MyModel.ThreadCount = ReadValue("Main", "ThreadCount");            MyModel.Library = ReadValue("Main", "Library");            mThread = new Thread[(int.Parse(MyModel.ThreadCount))];            //将数据库名称存入数组            mDataBase = MyModel.Library.Split(new char[]{','});        }        delegate void ChangeTextValue(string s);        private void ChangeValue(string s)        {            if (this.button2.InvokeRequired)            {                ChangeTextValue d = new ChangeTextValue(ChangeValue);                this.Invoke(d, new object[] { s });            }            else            {                this.button2.Text = s;            }        }        delegate void SetS(string s);        private void SetText(string s)        {            if (this.button2.InvokeRequired)            {                SetS d = new SetS(SetText);                this.Invoke(d, new object[] { s });            }            else            {                this.Status.Text =DateTime.Now.ToString() + " " +  s;            }        }        private void ThreadWork()        {            while(true)            {                switch(ThreadState)                {                    case 0:                    lock (this.button2)                    {                        //执行检测                        CheckDataBase();                        try                        {                            Thread.Sleep(50);                            //MessageBox.Show(Thread.CurrentThread.Name + " Close");                            SetText("Complete...");                            SetObjectStatus(true, button1);                            SetObjectStatus(true, button3);                            ChangeValue("Start");                            Thread.CurrentThread.Abort();                        }                        catch                        {                        }                        finally                        {                            Thread.CurrentThread.Abort();                        }                    }                    break;                    case 1:                    try                    {                        Thread.Sleep(50);                    }                    catch                    {                    }                    finally                    {                        Thread.CurrentThread.Abort();                    }                    break;                }            }        }        private int lCount = 0;//总记录数        delegate void a(string ID,string DataBaseName                        ,string tableName,string MasterRecordCount,string MirrorRecordCount,string same);        private void newLine(string ID, string DataBaseName                        , string tableName, string MasterRecordCount, string MirrorRecordCount, string same)        {            if (this.listView1.InvokeRequired)            {                a s = new a(newLine);                this.Invoke(s, new object[]{ID,DataBaseName,tableName                                ,MasterRecordCount,MirrorRecordCount,same});            }            else            {                ListViewItem Temp=new ListViewItem();                Temp.Text=(ID);                Temp.SubItems.Add(DataBaseName);                Temp.SubItems.Add(tableName);                Temp.SubItems.Add(MasterRecordCount);                Temp.SubItems.Add(MirrorRecordCount);                Temp.SubItems.Add(same);                listView1.Items.Add(Temp);            }        }        private void CheckDataBase()        {            lock (mDataBase)            {                do                {                    SetText("Connecting DataBase...");                    if (cDataIndex > mDataBase.Length - 1)                    {                        return;                    }                    string conn_Master_String = "Server=" + MyModel.MasterServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MasterUid + ";pwd=" + MyModel.MasterPwd;                    string conn_Mirror_String = "Server=" + MyModel.MirrorServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MirrorUid + ";pwd=" + MyModel.MirrorPwd;                    SqlConnection conn_Master = new SqlConnection(conn_Master_String);                    SqlConnection conn_Mirror = new SqlConnection(conn_Mirror_String);                    SqlCommand u_Master = new SqlCommand();                    SqlCommand u_Mirror = new SqlCommand();                    u_Master.Connection = conn_Master;                    u_Mirror.Connection = conn_Mirror;                    SetText("Geting all tables...");                    //获取所有表                    u_Master.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'";                    u_Mirror.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'";                    u_Master.Connection.Open();                    u_Mirror.Connection.Open();                    SqlDataAdapter Master_Sqldapater = new SqlDataAdapter();                    SqlDataAdapter Mirror_Sqldapater = new SqlDataAdapter();                    Master_Sqldapater.SelectCommand = u_Master;                    //Mirror_Sqldapater.SelectCommand = u_Mirror;                    DataSet Master_ds = new DataSet();                    //DataSet Mirror_ds = new DataSet();                    Master_Sqldapater.Fill(Master_ds);                    //Mirror_Sqldapater.Fill(Mirror_ds);                    int MasterCount = 0;                    int MirrorCount = 0;                    string mText = "";                    for (int i = 0; i < Master_ds.Tables[0].Rows.Count; i++)                    {                        try                        {                            if (ThreadState == 0)                            {                                SetText("Comparing...");                                //MessageBox.Show(Master_ds.Tables[0].Rows[i]["Name"].ToString());                                u_Master.CommandText = "SELECT Count(*) From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]";                                MasterCount = int.Parse(u_Master.ExecuteScalar().ToString());                                u_Mirror.CommandText = "SELECT Count(*) From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]";                                MirrorCount = int.Parse(u_Mirror.ExecuteScalar().ToString());                                lCount += 1;                                mText = Master_ds.Tables[0].Rows[i]["Name"].ToString();                                                                //newLine(lCount.ToString(), "No", mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString(), MasterCount.ToString());                                //lCount += 1;                                //newLine(lCount.ToString(), "Yes", mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString(), MirrorCount.ToString());                                if (MasterCount == MirrorCount)                                {                                    //当记录行相同的情况下判断是否相同的值                                    SetText("Checking table: " + Master_ds.Tables[0].Rows[i]["Name"].ToString());                                    DataSet Tempds = new DataSet();                                    u_Master.CommandText = "select name from syscolumns where id=object_id('" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "') order by colid";                                    Master_Sqldapater.SelectCommand = u_Master;                                    Master_Sqldapater.Fill(Tempds);                                                                                                            DataSet mMaster = new DataSet();                                    DataSet mMirror = new DataSet();                                    u_Master.CommandText = "SELECT * From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                                                        switch (Master_ds.Tables[0].Rows[i]["Name"].ToString())                                    {                                        case "ExecutionLogStorage":                                            u_Master.CommandText = "SELECT * FROM [ReportServer].[dbo].[ExecutionLogStorage_xml]order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                        case "Reporting":                                            u_Master.CommandText = "SELECT * FROM [RHSDB].[dbo].[Reporting_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                        case "ServiceVersions":                                            u_Master.CommandText = "SELECT * FROM [SaaS_BusConfiguration].[dbo].[ServiceVersions_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                        case "Log_EventData":                                            u_Master.CommandText = "SELECT * " +                                                           "  FROM [TopsLogging].[dbo].[Log_EventData_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                        case "TopsPolicyXml":                                            u_Master.CommandText = "SELECT * FROM [VirusScanProd].[dbo].[TopsPolicyXml_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                        case "ScContactActionItems":                                            u_Master.CommandText = "SELECT *  FROM [VirusScanProd].[dbo].[ScContactActionItems_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                        default:                                            u_Master.CommandText = "select * from [" + mDataBase[cDataIndex] + "].[dbo].[" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                            break;                                    }                                                                        u_Mirror.CommandText = "SELECT * From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString();                                    Master_Sqldapater.SelectCommand = u_Master;                                    Mirror_Sqldapater.SelectCommand = u_Mirror;                                    Master_Sqldapater.Fill(mMaster);                                    Mirror_Sqldapater.Fill(mMirror);                                                                        string temp = "Yes";                                    for (int o = 0; o < mMaster.Tables[0].Rows.Count; o++)                                    {                                        for (int x = 0; x < Tempds.Tables[0].Rows.Count; x++)                                        {                                            if (mMaster.Tables[0].Rows[o][x].ToString().Contains("WINDOWS\\System32") == true)                                            {                                                MessageBox.Show(Master_ds.Tables[0].Rows[i]["Name"].ToString() + "\n" + mDataBase[cDataIndex]);                                            }                                                                                        if (mMaster.Tables[0].Rows[o][x].ToString().Trim().GetHashCode() != mMirror.Tables[0].Rows[o][x].ToString().Trim().GetHashCode())                                            {                                                //MessageBox.Show(mMaster.Tables[0].Rows[o][x].ToString().GetHashCode() + "\n" + mMirror.Tables[0].Rows[o][x].ToString().GetHashCode() + "\n" + u_Master.CommandText);                                                temp = "The line " + (o + 1).ToString() + " of the record is not the same";                                            }                                        }                                    }                                    Tempds.Dispose();                                    newLine(lCount.ToString(), mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString()                                        , MasterCount.ToString(), MirrorCount.ToString(), temp);                                }                                else                                {                                    newLine(lCount.ToString(), mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString()                                        , MasterCount.ToString(), MirrorCount.ToString(), "No");                                }                            }                        }                        catch //(Exception es)                        {                            //MessageBox.Show(mDataBase[cDataIndex] + "\n" + es.Message);                        }                    }                    Master_Sqldapater.Dispose();                    Mirror_Sqldapater.Dispose();                    Master_ds.Dispose();                    //Mirror_ds.Dispose();                    u_Master.Dispose();                    u_Mirror.Dispose();                    conn_Master.Close();                    conn_Mirror.Close();                    conn_Master.Dispose();                    conn_Mirror.Dispose();                    cDataIndex += 1;                    if (cDataIndex > mDataBase.Length-1)                    {                        ThreadState = 1;                    }                    SetText("Comparing Complete,continuing...");                    CheckDataBase();                    //MessageBox.Show(cDataIndex.ToString());                }                while (cDataIndex < mDataBase.Length);            }        }        delegate void ObjectStatus(bool a, Button s);        private void SetObjectStatus(bool a, Button s)        {            if (s.InvokeRequired)            {                ObjectStatus d = new ObjectStatus(SetObjectStatus);                this.Invoke(d, new object[]{ a, s });            }            else            {                s.Enabled = a;            }        }        private void button3_Click(object sender, EventArgs e)        {            cDataIndex = 0;            Thread a = new Thread(Sync);            a.IsBackground = true;            a.Start();        }        //执行同步        private void Sync()        {            SetObjectStatus(false, button1);            SetObjectStatus(false, button2);            SetObjectStatus(false, button3);            SyncData();            SetObjectStatus(true, button1);            SetObjectStatus(true, button2);            SetObjectStatus(true, button3);            try            {                Thread.Sleep(5);            }            catch            {            }            finally            {                Thread.CurrentThread.Abort();            }        }        private void SyncData()        {                do                {                    SetText("Connecting DataBase...");                    if (cDataIndex > mDataBase.Length - 1)                    {                        return;                    }                    string conn_Master_String = "Server=" + MyModel.MasterServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MasterUid + ";pwd=" + MyModel.MasterPwd;                    string conn_Mirror_String = "Server=" + MyModel.MirrorServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MirrorUid + ";pwd=" + MyModel.MirrorPwd;                    SqlConnection conn_Master = new SqlConnection(conn_Master_String);                    SqlConnection conn_Mirror = new SqlConnection(conn_Mirror_String);                    SqlCommand u_Master = new SqlCommand();                    SqlCommand u_Mirror = new SqlCommand();                    u_Master.Connection = conn_Master;                    u_Mirror.Connection = conn_Mirror;                    SetText("Geting all tables...");                    //获取所有表                    u_Master.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'";                    u_Mirror.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'";                    u_Master.Connection.Open();                    u_Mirror.Connection.Open();                    SqlDataAdapter Master_Sqldapater = new SqlDataAdapter();                    SqlDataAdapter Mirror_Sqldapater = new SqlDataAdapter();                    Master_Sqldapater.SelectCommand = u_Master;                    //Mirror_Sqldapater.SelectCommand = u_Mirror;                    DataSet Master_ds = new DataSet();                    //DataSet Mirror_ds = new DataSet();                    Master_Sqldapater.Fill(Master_ds);                    //Mirror_Sqldapater.Fill(Mirror_ds);                    string mText = "";                    for (int i = 0; i < Master_ds.Tables[0].Rows.Count; i++)                    {                        try                        {                                SetText("Truncate Mirror data...");                                u_Mirror.CommandText = "truncate table [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]";                                u_Mirror.ExecuteNonQuery();                                //lCount += 1;                                mText = Master_ds.Tables[0].Rows[i]["Name"].ToString();                                /*                                if (mText.Contains("TopsPolicyXml")==true)                                {                                    u_Mirror.CommandText = "SELECT COUNT(*) FROM [TopsPolicyXml]";                                    MessageBox.Show(u_Mirror.ExecuteScalar().ToString());                                }                                */                                        //当记录行相同的情况下判断是否相同的值                                                                SetText("Sync table: " + Master_ds.Tables[0].Rows[i]["Name"].ToString());                                DataSet Tempds = new DataSet();                                switch (Master_ds.Tables[0].Rows[i]["Name"].ToString())                                {                                    case "ExecutionLogStorage":                                        u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] SELECT * FROM [192.168.0.74].[ReportServer].[dbo].[ExecutionLogStorage_xml]";                                        break;                                    case "Reporting":                                        u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] SELECT * FROM [192.168.0.74].[RHSDB].[dbo].[Reporting_xml]";                                        break;                                    case "ServiceVersions":                                        u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] SELECT * FROM [192.168.0.74].[SaaS_BusConfiguration].[dbo].[ServiceVersions_xml]";                                        break;                                    case "Log_EventData":                                        u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] SELECT * " +                                                       "  FROM [192.168.0.74].[TopsLogging].[dbo].[Log_EventData_xml]";                                        break;                                    case "TopsPolicyXml":                                        //u_Mirror.CommandText = "SELECT [policyXml] FROM [192.168.0.74].[VirusScanProd].[dbo].[TopsPolicyXml_xml] where id=27";                                        //MessageBox.Show(u_Mirror.ExecuteScalar().ToString());                                        u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] SELECT * FROM [192.168.0.74].[VirusScanProd].[dbo].[TopsPolicyXml_xml]";                                        break;                                    case "ScContactActionItems":                                        u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] SELECT *  FROM [192.168.0.74].[VirusScanProd].[dbo].[ScContactActionItems_xml]";                                        break;                                    default:                                            u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() +                                                       "] select * from [192.168.0.74].[" + mDataBase[cDataIndex] + "].[dbo].[" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]";                                        break;                                }                                u_Mirror.ExecuteNonQuery();                                //newLine(lCount.ToString(), mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString()                                //    , MasterCount.ToString(), MirrorCount.ToString(), temp);                        }                        catch (Exception es)                        {                            MessageBox.Show(mDataBase[cDataIndex] + "\n" + es.Message + "\n" + DateTime.Now.ToString());                        }                    }                    Master_Sqldapater.Dispose();                    Mirror_Sqldapater.Dispose();                    Master_ds.Dispose();                    //Mirror_ds.Dispose();                    u_Master.Dispose();                    u_Mirror.Dispose();                    conn_Master.Close();                    conn_Mirror.Close();                    conn_Master.Dispose();                    conn_Mirror.Dispose();                    cDataIndex += 1;                    if (cDataIndex > mDataBase.Length - 1)                    {                        ThreadState = 1;                    }                    SetText("Comparing Complete,continuing...");                    SyncData();                    //MessageBox.Show(cDataIndex.ToString());                    SetText("Sync complete...");                }                while (cDataIndex < mDataBase.Length);            }    }}

 

Config.cs

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Database_tracking{    public partial class Config : Form    {        private string configPath = Application.StartupPath + "\\config.ini";        /****操作INI文件开始***********/        [System.Runtime.InteropServices.DllImport("kernel32")]        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);        // 声明INI文件的读操作函数 GetPrivateProfileString()        [System.Runtime.InteropServices.DllImport("kernel32")]        private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);                public string ReadValue(string section, string key)        {            // 每次从ini中读取多少字节            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);            // section=配置节,key=键名,temp=上面,path=路径            GetPrivateProfileString(section, key, "", temp, 255, configPath);            return temp.ToString();        }        public void Writue(string section, string key, string value)        {            // section=配置节,key=键名,value=键值,path=路径            WritePrivateProfileString(section, key, value, configPath);        }        /*****操作INI文件结束**********/        public Config()        {            InitializeComponent();        }        private void Config_Load(object sender, EventArgs e)        {            MasterServer.Text = ReadValue("Main", "MasterServer");            MasterUid.Text = ReadValue("Main", "MasterUid");            MasterPwd.Text = ReadValue("Main", "MasterPwd");            MirrorServer.Text = ReadValue("Main", "MirrorServer");            MirrorUid.Text = ReadValue("Main", "MirrorUid");            MirrorPwd.Text = ReadValue("Main", "MirrorPwd");            ThreadCount.Text = ReadValue("Main", "ThreadCount");            Tables.Text = ReadValue("Main", "Library");            MyModel.MasterServer = MasterServer.Text;            MyModel.MasterUid = MasterUid.Text;            MyModel.MasterPwd = MasterPwd.Text;            MyModel.MirrorServer = MirrorServer.Text;            MyModel.MirrorUid = MirrorUid.Text;            MyModel.MirrorPwd = MirrorPwd.Text;            MyModel.Library = Tables.Text;            MyModel.ThreadCount = ThreadCount.Text;        }        private void button1_Click(object sender, EventArgs e)        {            CheckValue(MasterServer.Text,MasterServer);            CheckValue(MasterUid.Text,MasterUid);            CheckValue(MasterPwd.Text,MasterPwd);            CheckValue(MirrorServer.Text, MirrorServer);            CheckValue(MirrorUid.Text, MirrorUid);            CheckValue(MirrorPwd.Text, MirrorPwd);            CheckValue(ThreadCount.Text, ThreadCount);            CheckValue(Tables.Text, Tables);            if (isNumeric(ThreadCount.Text) == false)            {                MessageBox.Show("This must enter a number");                ThreadCount.Focus();            }            try            {                //Check True                Writue("Main", "MasterServer", MasterServer.Text);                Writue("Main", "MasterUid", MasterUid.Text);                Writue("Main", "MasterPwd", MasterPwd.Text);                Writue("Main", "MirrorServer", MirrorServer.Text);                Writue("Main", "MirrorUid", MirrorUid.Text);                Writue("Main", "MirrorPwd", MirrorPwd.Text);                Writue("Main", "ThreadCount", ThreadCount.Text);                Writue("Main", "Library", Tables.Text);                MyModel.MasterServer = MasterServer.Text;                MyModel.MasterUid = MasterUid.Text;                MyModel.MasterPwd = MasterPwd.Text;                MyModel.MirrorServer = MirrorServer.Text;                MyModel.MirrorUid = MirrorUid.Text;                MyModel.MirrorPwd = MirrorPwd.Text;                MyModel.Library = Tables.Text;                MyModel.ThreadCount = ThreadCount.Text;                MessageBox.Show("Sucess!", "Info");            }            catch(Exception es)            {                MessageBox.Show("Faled!Source: " + es.Message,"Info");            }                    }        private void CheckValue(string s,TextBox m)        {            if (s.Trim() == "")            {                MessageBox.Show("The value of can not be empty");                                m.Focus();            }        }        private bool isNumeric(string s)        {            try            {                int a = int.Parse(s);                return true;            }            catch            {                return false;            }        }    }}

 

MyModel.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Database_tracking{    static class MyModel    {        public static string MasterServer = "";        public static string MasterUid = "";        public static string MasterPwd = "";        public static string MirrorServer = "";        public static string MirrorUid = "";        public static string MirrorPwd = "";        public static string Library = "";        public static string ThreadCount = "";    }}


config.ini

[Main]MasterServer=(local)MasterUid=saMasterPwd=ericrobackMirrorServer=(local)MirrorUid=saMirrorPwd=ericrobackThreadCount=10Library=myCIO,EcomKeys,FirewallProd,NAIPartners,ReportServer,ReportServerTempDB,RHSDB,SaaS_BusConfiguration,SiebelExtract,SiteAdvisorprod,SMSProd,TopsLogging,TPSClient,TrustedToken,VirusScanProd,VSDetections,VSSummary



 


完整代码请点击:http://download.csdn.net/detail/robake/4701086