在我们的程序中,如何新建一个数据库?如何判断一个数据库是否存在?数据库的系统信息是怎样的?如何新建一个数据库表?如何得到一个数据库中所有的表明?等等这些任务,使用程序如何完成?这篇文章所展示的DBSystemHelper类将助你完成这些任务!DBSystemHelper是EnterpriseServerBase类库中DataAccess.DbSystem下的一个帮助类。类中所用到的IADOBase接口及SqlADOBase存在于EnterpriseServerBase.DataAccess命名空间中。

/**////<summary>
///DBSystemHelper用于提供数据库系统自身的信息,并提供对数据库自身的操作。目前主要针对SqlServer数据库。
///朱伟2005.08.17
///</summary>
publicclassDBSystemHelper

{
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>
publicclassDbSysInformation

{
publicintID;
publicstringName;
publicstringOwner;
publicDateTimeTimeCreated;
}
文章围绕程序中数据库操作展开,如新建数据库、判断数据库是否存在、获取系统信息、新建数据库表、获取所有表名等。介绍了DBSystemHelper类可完成这些任务,该类属于EnterpriseServerBase类库中DataAccess.DbSystem,还涉及相关接口和命名空间。
352

被折叠的 条评论
为什么被折叠?



