C#动态建库建表学习

来源:互联网 发布:gcp网络报名 编辑:程序博客网 时间:2024/06/05 19:44

         ITOO3.0的学习中为需要动态的建库建表来满足业务的灵活性,该功能使用过拼接建库建表的SQL语句以及SQLHelper实现的。

     这里只展示操作类,至于SQLHelper不再赘述。

 #region IsDBExist-判断数据库是否存在        /// <summary>        /// 判断数据库是否存在        /// </summary>        /// <param name="db">数据库的名称</param>        /// <param name="connKey">数据库的连接Key</param>        /// <returns>true:表示数据库已经存在;false,表示数据库不存在</returns>        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-判断数据库表是否存在        /// <summary>        /// 判断数据库表是否存在        /// </summary>        /// <param name="db">数据库</param>        /// <param name="tb">数据库表名</param>        /// <param name="connKey">连接数据库的key</param>        /// <returns></returns>        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-创建数据库        /// <summary>        /// 创建数据库        /// </summary>        /// <param name="db">数据库名称</param>        /// <param name="connKey">连接数据库的key</param>        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-在指定的数据库中,创建数据库表        /// <summary>        ///在指定的数据库中,创建数据库表        /// </summary>        /// <param name="db">指定的数据库</param>        /// <param name="dt">要创建的数据库表</param>        /// <param name="dic">数据表中的字段及其数据类型</param>        /// <param name="connKey">数据库的连接Key</param>        public void CreateDataTable(string db, string dt, Dictionary<string, string> 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<string> test = new List<string>(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-批量删除数据表        /// <summary>        /// 批量删除数据库        /// </summary>        /// <param name="db">指定的数据库</param>        /// <param name="dt">要删除的数据库表集合</param>        /// <param name="connKey">数据库连接串</param>        /// <returns>删除是否成功,true表示删除成功,false表示删除失败</returns>        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-删除数据库        /// <summary>        /// 删除数据库        /// </summary>        /// <param name="db">数据库名</param>        /// <param name="connKey">数据库连接串</param>        /// <returns>删除成功为true,删除失败为false</returns>        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-创建数据库表(多张表)        /// <summary>        ///  在指定的数据库中,创建数据表        /// </summary>        /// <param name="db">指定的数据库</param>        /// <param name="dt">要创建的数据表集合</param>        /// <param name="dic">数据表中的字段及其数据类型  Dictionary集合</param>        /// <param name="connKey">数据库的连接Key</param>        public void CreateDataTable(string db, string[] dt, List<Dictionary<string, string>> 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语句        /// <summary>        /// 拼接创建数据库表的Sql语句        /// </summary>        /// <param name="db">指定的数据库</param>        /// <param name="dt">要创建的数据表</param>        /// <param name="dic">数据表中的字段及其数据类型</param>        /// <returns>拼接完的字符串</returns>        public string PinjieSql(string db, string dt, Dictionary<string, string> dic)        {            //拼接字符串,(该串为创建内容)            string content = "serial int identity(1,1) primary key ";            //取出dic中的内容,进行拼接            List<string> test = new List<string>(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<Dictionary<string, string>> listDic = new List<Dictionary<string, string>>();                //用一个键值来保存数据库表的字段和数据类型                Dictionary<string, string> dic1 = new Dictionary<string, string>();                dic1.Add("questionName", "varchar(20)");                dic1.Add("content", "varchar(20)");                Dictionary<string, string> dic2 = new Dictionary<string, string>();                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");
该功能仅限于学习阶段,是对他人博客进行的实践学习。

   

0 0
原创粉丝点击