使用C#的强大的异常和出错提示信息来判断制定数据库中的数据表是否存在!
一直在查找资料,可以使用ADO.NET来判断数据库中的某个名字的数据表是否存在。可是找到的资料多是使用ADOX这个COM组件的方法,我打算不使用这个组件了。.NET 2.0这么强大的软件不可能没有可以实现这个的功能吧!
冥思苦想之后,我终于想到了,可以使用它的异常和报错信息来实现这个目的。如果我需要创建某个数据库我也可以事先把这个数据库放在我的网站上面,然后在需要的时候,下载到当前电脑。这样也省掉了我之前一直在弄的使用ADOX来创建数据库的方法。
下面我把我的代码贴出来,算是给我自己的一个小小的总结。
如果大侠们有什么好的办法,请多多指教。
注:因为我不是很清楚出错信息的内容,所以没有设置判断出错信息,然后给出相应解决办法,请自行设置。
public partial class Form1 : Form
{
public const string MDBName = "WebmailDB.MDB";
public const string TbUser = "username";
public const string MDBURI = "http://localhost/WebmailOutlook/Download/WebmailDB/2007-4-26_WebmailDB._MDB";
public static string MDBPath = System.IO.Directory.GetCurrentDirectory() + MDBName;
public Boolean HasLogin;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists(MDBPath) == false)
{
AdminMDB AdminMDB1 = new AdminMDB();
AdminMDB1.CreatNewMDB(MDBPath);
AdminMDB1.CreatNewTbUser(MDBPath,TbUser);
}
Login login1 = new Login();
login1.ShowDialog();
}

private void button1_Click(object sender, EventArgs e)
{
MakeSureMDB();
}
private void MakeSureMDB()
{
string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source=" + System.IO.Directory.GetCurrentDirectory() + "WebmailDB.MDB";
OleDbConnection objConnection = new OleDbConnection(strConnection);
string OledbCommandString = "SELECT AutoID FROM username";
OleDbCommand objCommand = new OleDbCommand(OledbCommandString, objConnection);
objConnection.Open();
try
{
OleDbDataReader objDataReader = objCommand.ExecuteReader();
if (objDataReader.Read())
{
textBox1.Text += objDataReader["AutoID"];
}
else
{
textBox1.Text += "没有找到数据!";
}
objDataReader.Close();
objConnection.Close();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message + "\r\n系统将会自动修复数据库。", "出错:", MessageBoxButtons.OK);
objConnection.Close();
textBox1.Text += "\r\n数据表找不到!\r\n开始从网上下载新的数据库!";
if (MessageBox.Show("重新下载新的数据库将会清除您本机的数据库,您确定吗?否则,请取消!", "问询", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
System.Net.WebClient WClient = new System.Net.WebClient();
WClient.DownloadFile(MDBURI, MDBPath);
textBox1.Text += "\r\n新的数据库下载成功!原先的数据库已经被覆盖!";
MakeSureMDB();
}
else
{
Application.Exit();
}
}

}
}
一直在查找资料,可以使用ADO.NET来判断数据库中的某个名字的数据表是否存在。可是找到的资料多是使用ADOX这个COM组件的方法,我打算不使用这个组件了。.NET 2.0这么强大的软件不可能没有可以实现这个的功能吧!
冥思苦想之后,我终于想到了,可以使用它的异常和报错信息来实现这个目的。如果我需要创建某个数据库我也可以事先把这个数据库放在我的网站上面,然后在需要的时候,下载到当前电脑。这样也省掉了我之前一直在弄的使用ADOX来创建数据库的方法。
下面我把我的代码贴出来,算是给我自己的一个小小的总结。
如果大侠们有什么好的办法,请多多指教。
注:因为我不是很清楚出错信息的内容,所以没有设置判断出错信息,然后给出相应解决办法,请自行设置。
public partial class Form1 : Form
{
public const string MDBName = "WebmailDB.MDB";
public const string TbUser = "username";
public const string MDBURI = "http://localhost/WebmailOutlook/Download/WebmailDB/2007-4-26_WebmailDB._MDB";
public static string MDBPath = System.IO.Directory.GetCurrentDirectory() + MDBName;
public Boolean HasLogin;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists(MDBPath) == false)
{
AdminMDB AdminMDB1 = new AdminMDB();
AdminMDB1.CreatNewMDB(MDBPath);
AdminMDB1.CreatNewTbUser(MDBPath,TbUser);
}
Login login1 = new Login();
login1.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
MakeSureMDB();
}
private void MakeSureMDB()
{
string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source=" + System.IO.Directory.GetCurrentDirectory() + "WebmailDB.MDB";
OleDbConnection objConnection = new OleDbConnection(strConnection);
string OledbCommandString = "SELECT AutoID FROM username";
OleDbCommand objCommand = new OleDbCommand(OledbCommandString, objConnection);
objConnection.Open();
try
{
OleDbDataReader objDataReader = objCommand.ExecuteReader();
if (objDataReader.Read())
{
textBox1.Text += objDataReader["AutoID"];
}
else
{
textBox1.Text += "没有找到数据!";
}
objDataReader.Close();
objConnection.Close();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message + "\r\n系统将会自动修复数据库。", "出错:", MessageBoxButtons.OK);
objConnection.Close();
textBox1.Text += "\r\n数据表找不到!\r\n开始从网上下载新的数据库!";
if (MessageBox.Show("重新下载新的数据库将会清除您本机的数据库,您确定吗?否则,请取消!", "问询", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
System.Net.WebClient WClient = new System.Net.WebClient();
WClient.DownloadFile(MDBURI, MDBPath);
textBox1.Text += "\r\n新的数据库下载成功!原先的数据库已经被覆盖!";
MakeSureMDB();
}
else
{
Application.Exit();
}
} 
}
}

浙公网安备 33010602011771号