在我们的程序中,如何新建一个数据库?如何判断一个数据库是否存在?数据库的系统信息是怎样的?如何新建一个数据库表?如何得到一个数据库中所有的表明?等等这些任务,使用程序如何完成?这篇文章所展示的DBSystemHelper类将助你完成这些任务!DBSystemHelper是EnterpriseServerBase类库中DataAccess.DbSystem下的一个帮助类。类中所用到的IADOBase接口及SqlADOBase存在于EnterpriseServerBase.DataAccess命名空间中。
/**/
///<summary>
///DBSystemHelper用于提供数据库系统自身的信息,并提供对数据库自身的操作。目前主要针对SqlServer数据库。
///朱伟2005.08.17
///</summary>
public
class
DBSystemHelper

{
publicDBSystemHelper()


{
}


GetAllDbSysInfos,IsDbExist,GetDbSysInformation#regionGetAllDbSysInfos,IsDbExist,GetDbSysInformation

/**////<summary>
///得到所有数据库的系统信息
///</summary>
publicstaticDbSysInformation[]GetAllDbSysInfos(stringdbIP,stringuser,stringpwd)


{
stringconnStr=string.Format("Server={0};User={1};Pwd={2}",dbIP,user,pwd);
IADOBaseadoBase=newSqlADOBase(connStr);

try


{
DataSetds=adoBase.DoQuery("sp_helpdb");
DbSysInformation[]dbInfos=newDbSysInformation[ds.Tables[0].Rows.Count];
for(inti=0;i<dbInfos.Length;i++)


{
dbInfos[i].ID=int.Parse(ds.Tables[0].Rows[i]["DbID"].ToString());
dbInfos[i].Name=ds.Tables[0].Rows[i]["Name"].ToString();
dbInfos[i].Owner=ds.Tables[0].Rows[i]["Owner"].ToString();
dbInfos[i].TimeCreated=DateTime.Parse(ds.Tables[0].Rows[i]["Created"].ToString());
}

returndbInfos;
}
catch(Exceptionee)


{
throwee;
}
}


/**////<summary>
///判断某个数据库是否存在
///</summary>
publicstaticboolIsDbExist(stringdbIP,stringuser,stringpwd,stringdbName)


{
DbSysInformation[]dbInfos=DBSystemHelper.GetAllDbSysInfos(dbIP,user,pwd);
for(inti=0;i<dbInfos.Length;i++)


{
if(dbInfos[i].Name==dbName)


{
returntrue;
}
}

returnfalse;
}


/**////<summary>
///得到指定数据库的系统信息
///</summary>
publicstaticDbSysInformationGetDbSysInformation(stringdbIP,stringuser,stringpwd,stringdbName)


{
DbSysInformation[]dbInfos=DBSystemHelper.GetAllDbSysInfos(dbIP,user,pwd);
for(inti=0;i<dbInfos.Length;i++)


{
if(dbInfos[i].Name==dbName)


{
returndbInfos[i];
}
}

returnnull;
}
#endregion


GetAllTableNames,IsTableExist#regionGetAllTableNames,IsTableExist

/**////<summary>
///得到指定数据库中所有用户表的名字
///</summary>
publicstaticstring[]GetAllTableNames(stringconnStr)


{
IADOBaseadoBase=newSqlADOBase(connStr);

stringquery="selectnamefromsysobjectswhereOBJECTPROPERTY(id,'IsUserTable')=1";
DataSetds=adoBase.DoQuery(query);

string[]names=newstring[ds.Tables[0].Rows.Count];
for(inti=0;i<ds.Tables[0].Rows.Count;i++)


{
names[i]=ds.Tables[0].Rows[i][0].ToString();
}

returnnames;
}


/**////<summary>
///判断特定的数据库中是否存在某个表
///</summary>
publicstaticboolIsTableExist(stringconnStr,stringtableName)


{
string[]names=DBSystemHelper.GetAllTableNames(connStr);
for(inti=0;i<names.Length;i++)


{
if(names[i]==tableName)


{
returntrue;
}
}

returnfalse;
}
#endregion


CreateDb,RemoveDb#regionCreateDb,RemoveDb

/**////<summary>
///创建一个新的数据库
///</summary>
publicstaticvoidCreateDb(stringdbIP,stringuser,stringpwd,stringnewDbName)


{
stringconnStr=string.Format("Server={0};User={1};Pwd={2}",dbIP,user,pwd);
IADOBaseadoBase=newSqlADOBase(connStr);

stringcommand=string.Format("Createdatabase{0}",newDbName);
adoBase.DoCommand(command);
}


/**////<summary>
///删除指定数据库
///</summary>
publicstaticvoidRemoveDb(stringdbIP,stringuser,stringpwd,stringdbName)


{
stringconnStr=string.Format("Server={0};User={1};Pwd={2}",dbIP,user,pwd);
IADOBaseadoBase=newSqlADOBase(connStr);

stringcommand=string.Format("Dropdatabase{0}",dbName);
adoBase.DoCommand(command);
}
#endregion


BackUpDb,RestoreDb#regionBackUpDb,RestoreDb

/**////<summary>
///备份指定数据库
///</summary>
publicstaticvoidBackUpDb(stringdbIP,stringuser,stringpwd,stringdbName,stringbakFilePath)


{
stringconnStr=string.Format("Server={0};User={1};Pwd={2}",dbIP,user,pwd);
IADOBaseadoBase=newSqlADOBase(connStr);

stringcommand=string.Format("use{0}backupdatabase{0}todisk='{1}'",dbName,bakFilePath);
adoBase.DoCommand(command);
}


/**////<summary>
///还原指定数据库
///</summary>
publicstaticvoidRestoreDb(stringdbIP,stringuser,stringpwd,stringbakFilePath,stringdbName)


{
stringconnStr=string.Format("Server={0};User={1};Pwd={2}",dbIP,user,pwd);
IADOBaseadoBase=newSqlADOBase(connStr);

stringcommand=string.Format("use{0}restoredatabase{0}fromdisk='{1}'",dbName,bakFilePath);
adoBase.DoCommand(command);
}
#endregion


CreateTable,RemoveTable#regionCreateTable,RemoveTable

/**////<summary>
///在数据库中创建指定表
///</summary>
publicvoidCreateTable(stringconnStr,DBTableDetailtableInfo)


{
//形成SQL语句
StringBuilderstrBuilder=newStringBuilder();
stringstr_create=string.Format("CreateTable{0}",tableInfo.TableName);
strBuilder.Append(str_create);
strBuilder.Append("(");

intstart=0;
if(tableInfo.Columns[0].ColumnType=="int")


{
if(tableInfo.Columns[0].IsAutoID)


{
strBuilder.Append(string.Format("{0}intPRIMARYKEYIDENTITY,",tableInfo.Columns[0].ColumnName));
start=1;
}
}

for(inti=start;i<tableInfo.Columns.Length;i++)


{
boollength_fixed=DBSystemHelper.DBType_lengthFixed(tableInfo.Columns[i].ColumnType);
stringitem;
if(length_fixed)


{
item=string.Format("{0}{1}",tableInfo.Columns[i].ColumnName,tableInfo.Columns[i].ColumnType);
}
else


{
item=string.Format("{0}{1}({2})",tableInfo.Columns[i].ColumnName,tableInfo.Columns[i].ColumnType);
}

if((tableInfo.Columns[i].DefaultValue!=null)&&(tableInfo.Columns[i].DefaultValue!=""))


{
item+=string.Format("DEFAULT{0}",tableInfo.Columns[i].DefaultValue);
}

if(tableInfo.Columns[i].IsPkey)


{
item+="PRIMARYKEY";
}

if(i!=tableInfo.Columns.Length-1)


{
item+=",";
}

strBuilder.Append(item);

}

strBuilder.Append(")");

//插入数据库
IADOBaseadoBase=newSqlADOBase(connStr);
adoBase.DoCommand(strBuilder.ToString());
}


/**////<summary>
///删除数据库中的指定表
///</summary>
publicvoidRemoveTable(stringconnStr,stringtableName)


{
IADOBaseadoBase=newSqlADOBase(connStr);
stringdeleteStr=string.Format("DropTable{0}",tableName);
adoBase.DoCommand(deleteStr);
}

privatestaticboolDBType_lengthFixed(stringDB_type)


{
if(DB_type=="nvarchar"||DB_type=="varbinary")


{
returnfalse;
}

returntrue;
}
#endregion
}


/**/
///<summary>
///某个数据库的系统信息
///</summary>
public
class
DbSysInformation

{
publicintID;
publicstringName;
publicstringOwner;
publicDateTimeTimeCreated;
}