淺談初探MS SQL CE Codesmith_Mssql數(shù)據(jù)庫教程
推薦:解析提高SQL執(zhí)行效率的幾點(diǎn)建議提高SQL執(zhí)行效率的幾點(diǎn)建議: ◆盡量不要在where中包含子查詢; 關(guān)于時(shí)間的查詢,盡量不要寫成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd'); ◆在過濾條件中,可以過濾掉最大數(shù)量記錄的條件必須放在where子句的末尾; FROM子句
原來的程序是使用sqlite這個(gè)嵌入式數(shù)據(jù)庫作為Remit(code name)的數(shù)據(jù)源的,因?yàn)镹Hibernate支持這個(gè),然而有一點(diǎn)不好的是sqlite不支持外鍵,導(dǎo)致可悲的codesmith不能得到關(guān)系,無法生成我喜歡的多對多映射.如果手寫就要寫映射xml文件以及業(yè)務(wù)實(shí)體類,這可是我這種懶人不喜歡的.況且數(shù)據(jù)庫經(jīng)常變更,良好的代碼生成可以做到數(shù)據(jù)庫與代碼的同步.
硬盤壞了也是一種契機(jī),我突然想到了Sql Server還有一個(gè)CE版本,現(xiàn)在不止提供For Mobile的,還提供桌面版.這種可愛的嵌入式數(shù)據(jù)庫可比沒意思的Access好得多了. 這東西雖然沒store function(其實(shí)有ORM基本沒必要用),但是索引啊,表關(guān)系啊還是很全面的.微軟的東西就是好,造福全懶人嘛..
然而我的數(shù)據(jù)庫原來是Access的,在網(wǎng)上找了半天工具只找到一個(gè)Sql To Sql Ce的工具.于是用Access的升遷向?qū)w到MS SQL,然后在MS SQL Server里面建立表關(guān)系.然后用那個(gè)工具導(dǎo)入到SQL CE里面. 然后又自己編譯了一個(gè)Codesmith的數(shù)據(jù)庫Schema provider(因?yàn)橐郧斑@個(gè)是for 4.0的,而我的是5.0).
那個(gè)遷移工具貌似有點(diǎn)問題,沒有把表關(guān)系完全copy過去,自己的SQL Menagement Studio版本可能太低,不能打開3.5的CE數(shù)據(jù)庫.結(jié)果用Codesmith就沒法生成我要的關(guān)系.不爽.想到NHibernate其實(shí)對于表關(guān)系是不依賴于數(shù)據(jù)庫的,只要有表就可以了,所以想到一個(gè)特別二的方法,就是用MS SQL做Codesmith的數(shù)據(jù)源,生成文件,而程序中則使用遷移后的CE數(shù)據(jù)庫.(其實(shí)感覺直接用MS SQL Server也可以,最后發(fā)布的時(shí)候換CE)
不過最郁悶的事情是在使用NHibernate進(jìn)行測試的時(shí)候,居然提示我某個(gè)查詢不能執(zhí)行,而我在VS 2008的數(shù)據(jù)庫的查詢里面那個(gè)查詢是可以運(yùn)行的SELECT this_.ID as ID2_0_, this_.BookName as BookName2_0_, this_.LangID as LangID2_0_ FROM dbo.Book this_ 我實(shí)在是很無奈啊,找錯(cuò)誤NHibernate扔出來的異常的InnerException也看不出什么來,我就自己用ADO寫了一個(gè)
System.Data.SqlServerCe.SqlCeConnection conn=new System.Data.SqlServerCe.SqlCeConnection(@"Data Source=E:LoningLoning.Remitdb.sdf");
SqlCeCommand command=new SqlCeCommand("SELECT this_.ID as ID2_0_, this_.BookName as BookName2_0_, this_.LangID as LangID2_0_ FROM dbo.Book this_",conn);
conn.Open();
最后這東西提示表名異常,我一檢查表名,想起由于是Sql Server生成的,帶著個(gè)dbo.前綴,發(fā)現(xiàn)生成的NHibernate的配置文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Loning.Remit.BusinessObjects" assembly="Loning.Remit">
<class name="Loning.Remit.BusinessObjects.Book, Loning.Remit" table="dbo.Book" lazy="true">
<id name="Id" column="ID">
<generator class="assigned" />
</id>
<property name="BookName" column="BookName" />
<many-to-one name="Language" column="LangID" class="Language" />
<bag name="Words" lazy="true" cascade="all" inverse="true" >
<key column="BookID"></key>
<one-to-many class="Word"></one-to-many>
</bag>
</class>
</hibernate-mapping>
其中存在dbo.,去掉之后正常,于是更改Codesmith的這個(gè)模板.把table.FullName改成table.Name,生成后配置文件正確,而后重新生成一遍,編譯.過了. 我從下午5點(diǎn)開始折騰,一直折騰到11點(diǎn),總算把這些問題解決了,希望CE這東西可以好好工作...
內(nèi)容膚淺,還請見諒.發(fā)到首頁,實(shí)在惶恐.不發(fā)又基本沒人看...希望對大家在做這方面的時(shí)候有所幫助吧,今天google中文資料實(shí)在少.
分享:解析SQL Server 2005實(shí)現(xiàn)數(shù)據(jù)庫緩存依賴使用方法和步驟如下: step1 檢測是否已經(jīng)啟用ServiceBroker,檢測方法: SelectDATABASEpRoPERTYEX('數(shù)據(jù)庫名稱','IsBrokerEnabled') --1表示已經(jīng)啟用0表示沒有啟用 step2 如果ServiceBroker沒有啟用,使用下面語句啟用: ALTERDATABASE數(shù)據(jù)庫名稱SETENABLE
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 微軟數(shù)據(jù)平臺開發(fā)與SQL Server 2008
- sql2005 安裝教程 圖文
- 怎樣從SQL Server備份文件導(dǎo)入現(xiàn)存數(shù)據(jù)庫
- 用sp_lock診斷SQL Sever的性能問題
- 兩種技巧處理SQL Server中的單引號
- SQL Server 數(shù)據(jù)庫清除日志的方法
- 分析SQL Server性能的改進(jìn)與邏輯數(shù)據(jù)庫設(shè)計(jì)的關(guān)聯(lián)
- 解析SQL Server 2005常見問題
- 使用SQL Server 2008進(jìn)行服務(wù)器合并
- 解析SQL Server三大算法的I/O成本
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-淺談初探MS SQL CE Codesmith
。