使用ACCESS中隐藏的MSysObjects数据表来确定是否存在某个数据表!

在昨天的随笔中,我写了篇关于使用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();
        }
posted @ 2007-04-28 08:30  Athrun  阅读(437)  评论(0编辑  收藏  举报