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

笔者以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=sa
MasterPwd=ericroback
MirrorServer=(local)
MirrorUid=sa
MirrorPwd=ericroback
ThreadCount=10
Library=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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值