日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > [置頂] C#解決 動態創建庫、動態創建表

[置頂] C#解決 動態創建庫、動態創建表

來源:程序員人生   發布時間:2014-12-09 08:03:35 閱讀次數:2668次

    在1110號。我們開始著手做高校平臺這個項目,這個項目里面,有很多的子系統。權限系統、基礎系統、考試系統……

   既然是高校平臺,固然不只是1個學校用的,可以很多的學校公用。既然如此,每一個學校所要保存的數據固然不可能寄存在1個庫中。1個學校1個庫,那末有幾個學校用呢?未知。庫的數量得視情況而定。動態創建庫可以解決這類問題。

 

   固然,系統有很多。但是個人只是參與子系統的開發。在之前1直在考試系統里面打雜。這個項目分配下來了以后,我也就開始由打雜換了1種方式去打雜.

   在做項目的進程中,任務的分配是非常明確的。甚么時間干甚么事情,每天的任務等等。加上模塊的劃分,各系統之間的耦合要低等原則。這就要求底層的東西要封裝的特別好,重用性很高。

   由于之前1直都是在做題型和題庫 這幾個模塊。相對其他的模塊來講,題型這里更加抽象。由于每一個題型都有不同的特點。需要保存的方式也不同。至于題庫,那更是得需要題型提供支持啦。

   總不能每一個題型寫1遍。那還不得累死。

   在做需求的時候,就已知道,題型的這1部份是活的。這就需要1種新的方法――動態創建表。

 

動態生成庫,生成表。只知道用這些能解決以上的問題。

 

   在沒有接觸這些東西之前,畫題型的原型……不會畫。畫題型的類圖……把每一個題型都畫出來?累死不說,還不能擴大。

   這樣做出來的系統,要想添加題型,改代碼那是肯定的了。

 

   碰巧,前1陣子被組長調出去了,所要做的任務,也非常的合適。就是要把創建數據庫的方法和創建數據庫表的方法封裝起來。

   這東西做完,對理解題型需求是非常有用的。

 

任務很模糊,先做1個Demo,能實現就行。

1、提供數據庫名,然后去創建。

2、指定數據庫和數據表。固然還必須提供表字段和數據類型。去創建1張表。

 

 

在研究了1番以后,也就先用拼接sql語句的方法來做吧。有其他方法的請指出。

 

這些東西都被封裝在底層了。所以動態創建庫的方法 都需要用到SqlHelper。這里就不寫了。如果需要的話,文章末尾有下載地址。

 

#region 判斷數據庫是不是存在 /// <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 判斷數據庫中,指定表是不是存在 /// <summary> /// 判斷數據庫表是不是存在 /// </summary> /// <param name="db">數據庫</param> /// <param name="tb">數據表名</param> /// <param name="connKey">連接數據庫的key</param> /// <returns>true:表示數據表已存在;false,表示數據表不存在</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 創建數據庫 /// <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 創建數據庫表 /// <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


以上就是與動態創建庫,創建表相干的函數。

下面這里是調用

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //創建1個名為testQuestion的庫 CreateDataBase("questionType", "MSSql2012"); //用1個dictionary類型,來保存 數據庫表的字段 和 數據類型 Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("questionName", "varchar(20)"); dic.Add("content", "varchar(20)"); //在questionType庫中創建1張名為xuanzeti的表 CreateDataTable("questionType", "xuanzeti", dic, "MSSql2012"); } }


下面是履行前后的效果:

 

 

    用拼接Sql語句的方式封裝非常容易理解。作為底層的東西,重用性是非常高的。所以這1塊也就作為初版了。

    如果有更好的方式,請聯系我。

    Demo下載地址:http://download.csdn.net/detail/zc474235918/8207857

 

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 色一色综合 | 精精国产xxxx视频在线播放 | 久久国产精品久久久久久久久久 | aⅴ色国产 欧美 | 精品九九| 日日日操操操 | 精品国产一区二区三区成人影院 | 国产福利视频在线 | 亚洲色图28p | 黄网站在线免费看 | 99er在线 | 精品国产污污免费网站精东 | 日韩一区不卡 | 久久久精品一区二区 | 久久久久久久久99精品 | 91成人在线 | 国产一区视频在线 | 久久久久久国产免费视网址 | 人人澡人人添人人爽一区二区 | 日本一区二区三区视频在线 | 日韩成人小视频 | 日韩精品免费一区二区在线观看 | 女人黄色特级大片 | 久久av二区| 成人精品一区二区三区 | 青青草一区二区 | 一区二区视频在线 | 黄www在线观看 | 亚洲欧洲成人av每日更新 | 久久久精 | 免费成人黄色网 | 国产不卡免费视频 | 国产区网址 | 亚偷熟乱区自拍 | 久久久精品免费 | 成人在线黄色 | 黄视频在线免费 | 最近更新2019中文在线视频 | 国产精品久久久久7777婷婷 | 亚洲一区二区av | 亚洲三级在线播放 |