使用ACCESS中隱藏的MSysObjects資料表來確定是否存在某個資料表!
來源:互聯網
上載者:User
在昨天的隨筆中,我寫了篇關於使用C#的強大異常判斷和報錯來判斷是否已經存在了制定資料表,如果不存在則到網上下載。因為我考慮不周,沒有加上代碼,判斷出錯類型,所以很不準確。但是,應該說,這是一個思路,個人認為比較實用的思路。
今天我換了一個方法,使用ACCESS中隱藏的MSysObjects資料表來確定是否存在某個資料表!但是有前提條件,必須手動或者要本機設定MSysObjects資料表的可讀屬性。預設建立的ACCESS資料庫的MSysObjects資料表是不支援JET SQL來讀取的。
下面的代碼是我的軟體中的一部分,目的是對於已經存在的一個資料庫的MSysObjects資料表進行讀取,判斷是不是存在制定的資料表,如果不存在,則建立一個新的資料表。
下面是代碼: public void MakeTbuser(string MDBPath, string NewTbuserName)
{
string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source=" + MDBPath;
OleDbConnection objConnection = new OleDbConnection(strConnection);
string OleDbCommandString = "SELECT Id FROM MSysObjects WHERE Name='" + NewTbuserName + "' AND Type=1 AND Flags=0";
OleDbCommand objCommand = new OleDbCommand(OleDbCommandString,objConnection);
objConnection.Open();
OleDbDataReader objDataReader = objCommand.ExecuteReader();
Boolean bb;
if (objDataReader.Read())
bb = true;
else
bb = false;
objDataReader.Close();
if (bb == false)
{
OleDbCommandString = "CREATE TABLE " + NewTbuserName;
OleDbCommandString += " ( ";
OleDbCommandString += "AutoID AUTOINCREMENT(1,1) PRIMARY KEY,UserName TEXT(50),UserPsd TEXT(50),";
OleDbCommandString += "LastLoginTime DateTime,LoginTimes Int,MailInbox TEXT(10)";
OleDbCommandString += ");";
objCommand = new OleDbCommand(OleDbCommandString, objConnection);
objCommand.ExecuteNonQuery();
}
objCommand.Dispose();
objConnection.Close();
}