在昨天的随笔中,我写了篇关于使用C#的强大异常判断和报错来判断是否已经存在了制定数据表,如果不存在则到网上下载。因为我考虑不周,没有加上代码,判断出错类型,所以很不准确。但是,应该说,这是一个思路,个人认为比较实用的思路。
今天我换了一个方法,使用ACCESS中隐藏的MSysObjects数据表来确定是否存在某个数据表!但是有前提条件,必须手动或者要本机设置MSysObjects数据表的可读属性。默认创建的ACCESS数据库的MSysObjects数据表是不支持JET SQL来读取的。
下面的代码是我的软件中的一部分,目的是对于已经存在的一个数据库的MSysObjects数据表进行读取,判断是不是存在制定的数据表,如果不存在,则创建一个新的数据表。
下面是代码:
 public void MakeTbuser(string MDBPath, string NewTbuserName)
        public void MakeTbuser(string MDBPath, string NewTbuserName) 
 {
        {
 string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
            string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
 strConnection += @"Data Source=" + MDBPath;
            strConnection += @"Data Source=" + MDBPath;
 OleDbConnection objConnection = new OleDbConnection(strConnection);
            OleDbConnection objConnection = new OleDbConnection(strConnection);
 string OleDbCommandString = "SELECT Id FROM MSysObjects WHERE Name='" + NewTbuserName + "' AND Type=1 AND Flags=0";
            string OleDbCommandString = "SELECT Id FROM MSysObjects WHERE Name='" + NewTbuserName + "' AND Type=1 AND Flags=0";
 OleDbCommand objCommand = new OleDbCommand(OleDbCommandString,objConnection);
            OleDbCommand objCommand = new OleDbCommand(OleDbCommandString,objConnection);
 objConnection.Open();
            objConnection.Open();
 OleDbDataReader objDataReader = objCommand.ExecuteReader();
            OleDbDataReader objDataReader = objCommand.ExecuteReader();
 Boolean bb;
            Boolean bb;
 if (objDataReader.Read())
            if (objDataReader.Read())
 bb = true;
                bb = true;
 else
            else
 bb = false;
                bb = false;
 objDataReader.Close();
            objDataReader.Close();
 if (bb == false)
            if (bb == false)
 {
            {
 OleDbCommandString = "CREATE TABLE " + NewTbuserName;
                OleDbCommandString = "CREATE TABLE " + NewTbuserName;
 OleDbCommandString += " ( ";
                OleDbCommandString += " ( ";
 OleDbCommandString += "AutoID AUTOINCREMENT(1,1) PRIMARY KEY,UserName TEXT(50),UserPsd TEXT(50),";
                OleDbCommandString += "AutoID AUTOINCREMENT(1,1) PRIMARY KEY,UserName TEXT(50),UserPsd TEXT(50),";
 OleDbCommandString += "LastLoginTime DateTime,LoginTimes Int,MailInbox TEXT(10)";
                OleDbCommandString += "LastLoginTime DateTime,LoginTimes Int,MailInbox TEXT(10)";
 OleDbCommandString += ");";
                OleDbCommandString += ");";
 objCommand = new OleDbCommand(OleDbCommandString, objConnection);
                objCommand = new OleDbCommand(OleDbCommandString, objConnection);
 objCommand.ExecuteNonQuery();
                objCommand.ExecuteNonQuery();
 }
            }
 objCommand.Dispose();
            objCommand.Dispose();
 objConnection.Close();
            objConnection.Close();
 }
        }
 
今天我换了一个方法,使用ACCESS中隐藏的MSysObjects数据表来确定是否存在某个数据表!但是有前提条件,必须手动或者要本机设置MSysObjects数据表的可读属性。默认创建的ACCESS数据库的MSysObjects数据表是不支持JET SQL来读取的。
下面的代码是我的软件中的一部分,目的是对于已经存在的一个数据库的MSysObjects数据表进行读取,判断是不是存在制定的数据表,如果不存在,则创建一个新的数据表。
下面是代码:
 public void MakeTbuser(string MDBPath, string NewTbuserName)
        public void MakeTbuser(string MDBPath, string NewTbuserName)  {
        { string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
            string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;"; strConnection += @"Data Source=" + MDBPath;
            strConnection += @"Data Source=" + MDBPath; OleDbConnection objConnection = new OleDbConnection(strConnection);
            OleDbConnection objConnection = new OleDbConnection(strConnection); string OleDbCommandString = "SELECT Id FROM MSysObjects WHERE Name='" + NewTbuserName + "' AND Type=1 AND Flags=0";
            string OleDbCommandString = "SELECT Id FROM MSysObjects WHERE Name='" + NewTbuserName + "' AND Type=1 AND Flags=0"; OleDbCommand objCommand = new OleDbCommand(OleDbCommandString,objConnection);
            OleDbCommand objCommand = new OleDbCommand(OleDbCommandString,objConnection); objConnection.Open();
            objConnection.Open(); OleDbDataReader objDataReader = objCommand.ExecuteReader();
            OleDbDataReader objDataReader = objCommand.ExecuteReader(); Boolean bb;
            Boolean bb; if (objDataReader.Read())
            if (objDataReader.Read()) bb = true;
                bb = true; else
            else bb = false;
                bb = false; objDataReader.Close();
            objDataReader.Close(); if (bb == false)
            if (bb == false) {
            { OleDbCommandString = "CREATE TABLE " + NewTbuserName;
                OleDbCommandString = "CREATE TABLE " + NewTbuserName; OleDbCommandString += " ( ";
                OleDbCommandString += " ( "; OleDbCommandString += "AutoID AUTOINCREMENT(1,1) PRIMARY KEY,UserName TEXT(50),UserPsd TEXT(50),";
                OleDbCommandString += "AutoID AUTOINCREMENT(1,1) PRIMARY KEY,UserName TEXT(50),UserPsd TEXT(50),"; OleDbCommandString += "LastLoginTime DateTime,LoginTimes Int,MailInbox TEXT(10)";
                OleDbCommandString += "LastLoginTime DateTime,LoginTimes Int,MailInbox TEXT(10)"; OleDbCommandString += ");";
                OleDbCommandString += ");"; objCommand = new OleDbCommand(OleDbCommandString, objConnection);
                objCommand = new OleDbCommand(OleDbCommandString, objConnection); objCommand.ExecuteNonQuery();
                objCommand.ExecuteNonQuery(); }
            } objCommand.Dispose();
            objCommand.Dispose(); objConnection.Close();
            objConnection.Close(); }
        }
 
                     
                    
                 
                    
                 
 
         
        
 
             
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号