ITOO3.0的学习中为需要动态的建库建表来满足业务的灵活性,该功能使用过拼接建库建表的SQL语句以及SQLHelper实现的。
这里只展示操作类,至于SQLHelper不再赘述。
#region IsDBExist-判断数据库是否存在
///
/// 判断数据库是否存在
///
/// 数据库的名称
/// 数据库的连接Key
/// true:表示数据库已经存在;false,表示数据库不存在
public Boolean IsDBExist(string db, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
string createDbStr = " select * from master.dbo.sysdatabases where name " + "= '" + db + "'";
DataTable dt = helper.ExecuteQuery(createDbStr, CommandType.Text);
if (dt.Rows.Count == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
#region IsTableExist-判断数据库表是否存在
///
/// 判断数据库表是否存在
///
/// 数据库
/// 数据库表名
/// 连接数据库的key
///
public Boolean IsTableExist(string db, string tb, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
string createDbStr = "use " + db + " select 1 from sysobjects where id = object_id('" + tb + "') and type ='U'";
//在指定的数据库中 查找该表是否存在
DataTable dt = helper.ExecuteQuery(createDbStr, CommandType.Text);
if (dt.Rows.Count == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
#region CreateDataBase-创建数据库
///
/// 创建数据库
///
/// 数据库名称
/// 连接数据库的key
public void CreateDataBase(string db, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
//符号变量,判断数据库是否存在
Boolean flag = IsDBExist(db, connKey);
//如果数据库存在,则抛出
if (flag == true)
{
throw new Exception("数据库已经存在!");
}
else
{
//数据库不存在,创建数据库
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
string createDbStr = "Create database " + db;
helper.ExecuteNonQuery(createDbStr, CommandType.Text);
}
}
#endregion
#region CreateDataTable-在指定的数据库中,创建数据库表
///
///在指定的数据库中,创建数据库表
///
/// 指定的数据库
/// 要创建的数据库表
/// 数据表中的字段及其数据类型
/// 数据库的连接Key
public void CreateDataTable(string db, string dt, Dictionary dic, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
//判断数据库是否存在
if (IsDBExist(db, connKey) == false)
{
throw new Exception("数据库不存在!");
}
//如果数据库表存在,则抛出错误
if (IsTableExist(db, dt, connKey) == true)
{
throw new Exception("数据库表已经存在!");
}
//数据库表不存在,创建表
else
{
//拼接字符串,该串为创建内容
string content = "serial int identity(1,1) primary key";
//取出dic中的内容,进行拼接
List test = new List(dic.Keys);
for (int i = 0; i < dic.Count(); i++)
{
content = content + "," + test[i] + "" + dic[test[i]];
}
//其后判断数据库表是否存在,然创建表
string createTableStr = "use " + db + "create table" + dt + "(" + content + ")";
helper.ExecuteNonQuery(createTableStr, CommandType.Text);
}
}
#endregion
#region DropDataTable-批量删除数据表
///
/// 批量删除数据库
///
/// 指定的数据库
/// 要删除的数据库表集合
/// 数据库连接串
/// 删除是否成功,true表示删除成功,false表示删除失败
public bool DropDataTable(string db, string[] dt, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
//判断数据库是否存在
if (IsDBExist(db, connKey) == false)
{
throw new Exception("数据库不存在!");
}
for (int i = 0; i < dt.Count(); i++)
{
//如果数据库表存在,则抛出错误
if (IsTableExist(db, dt[i], connKey) == false)
{
//如果数据库表已经删除,则跳过该表
continue;
}
else//数据表存在,则进行删除数据表
{
//其后判断数据表是否存在,然后创建数据表
string createTableStr = "use " + db + " drop table " + dt[i] + " ";
helper.ExecuteNonQuery(createTableStr, CommandType.Text);
}
}
return true;
}
#endregion
#region DropDataBase-删除数据库
///
/// 删除数据库
///
/// 数据库名
/// 数据库连接串
/// 删除成功为true,删除失败为false
public bool DropDataBase(string db, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
//符号变量,判断数据库是否存在
Boolean flag = IsDBExist(db, connKey);
//如果数据库不存在,则抛出
if (flag == false)
{
return false;
}
else
{
//数据库存在,删除数据库
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
string createDbStr = "Drop database " + db;
helper.ExecuteNonQuery(createDbStr, CommandType.Text);
return true;
}
}
#endregion
#region CreateDataTable-创建数据库表(多张表)
///
/// 在指定的数据库中,创建数据表
///
/// 指定的数据库
/// 要创建的数据表集合
/// 数据表中的字段及其数据类型 Dictionary集合
/// 数据库的连接Key
public void CreateDataTable(string db, string[] dt, List> dic, string connKey)
{
SQLHelper helper = SQLHelper.GetInstance();
string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
//判断数据库是否存在
if (IsDBExist(db, connKey) == false)
{
throw new Exception("数据库不存在!");
}
for (int i = 0; i < dt.Count(); i++)
{
//如果数据库表存在,则抛出错误
if (IsTableExist(db, dt[i], connKey) == true)
{
//如果数据库表已经存在,则跳过该表
continue;
}
else//数据表不存在,创建数据表
{
//其后判断数据表是否存在,然后创建数据表
string createTableStr = PinjieSql(db, dt[i], dic[i]);
helper.ExecuteNonQuery(createTableStr, CommandType.Text);
}
}
}
#endregion
#region PinjieSql-拼接创建数据库表的Sql语句
///
/// 拼接创建数据库表的Sql语句
///
/// 指定的数据库
/// 要创建的数据表
/// 数据表中的字段及其数据类型
/// 拼接完的字符串
public string PinjieSql(string db, string dt, Dictionary dic)
{
//拼接字符串,(该串为创建内容)
string content = "serial int identity(1,1) primary key ";
//取出dic中的内容,进行拼接
List test = new List(dic.Keys);
for (int i = 0; i < dic.Count(); i++)
{
content = content + " , " + test[i] + " " + dic[test[i]];
}
//其后判断数据表是否存在,然后创建数据表
string createTableStr = "use " + db + " create table " + dt + " (" + content + ")";
return createTableStr;
}
#endregion
前台调用操作类方法
if (!Page .IsPostBack)
{
dynamicCreateDB operateDB = new dynamicCreateDB();
//先删除ceshi 数据库
operateDB.DropDataBase("ceshi", "MSSql2012");
//创建一个名为test的库
operateDB.CreateDataBase("ceshi", "MSSql2012");
//创建键值集合
List> listDic = new
List>();
//用一个键值来保存数据库表的字段和数据类型
Dictionary dic1 = new Dictionary();
dic1.Add("questionName", "varchar(20)");
dic1.Add("content", "varchar(20)");
Dictionary dic2 = new Dictionary();
dic2.Add("questionName", "varchar(20)");
dic2.Add("content", "varchar(20)");
listDic.Add(dic1);
listDic.Add(dic2);
//在test库中创建一张纸名为xuanzeti的表
string[] listTable = { "xuanzeti", "tiankongti" };
operateDB.CreateDataTable("ceshi",listTable, listDic,"MSSql2012");
operateDB.DropDataTable("ceshi", listTable, "MSSql2012");
operateDB.DropDataBase("ceshi","MSSql2012");
该功能仅限于学习阶段,是对他人博客进行的实践学习。