今天我换了一个方法,使用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();
}
{
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();
}