在昨天的随笔中,我写了篇关于使用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();

        }


申明

非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

博文欢迎转载,但请给出原文连接。