您的位置:首页 > 数据库

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

2012-10-30 10:32 169 查看
笔者以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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐