本章節主要講述如何使用Smark.Data 1.8進行快速的數據庫應用開發,主要內容包括配置,執行SQL和存儲過程等基礎的數據操作.
配置
在組件使用之前必須進行一個初始化配置,主要配置數據訪問設備和對應的數據庫的連接信息.組件可以通過兩種途徑來進行數據配置分別是配置文件和代碼.
- Config配置
<configSections> <section name="smarkdata" type="Smark.Data.SmarkDataSection,Smark.Data"/> </configSections> <smarkdata> <Connection> <add name="0" type="Smark.Data.MSSQL,Smark.Data" connectionstring="Data Source=WIN-KHLG2RFMS2R;Initial Catalog=Northwind;User ID=sa;Password=abc_123"/> </Connection> <Assembly> <clear/> <Assembly/> </smarkdata>
- 代碼配置
DBContext.SetConnectionDriver<MSSQL>(ConnectionType.Context1); DBContext.SetConnectionString(ConnectionType.Context1, @"Data Source=WIN-KHLG2RFMS2R;Initial Catalog=Northwind;User ID=sa;Password=abc_123");以上分別是配置一個MSSQL的數據訪問設備和相應的數據庫連接信息.也許會有同學問組件支持多數據庫配置嗎?答案是可以的,組件支持最多配置30個不同數據訪問信息.簡單地說使用Smark.Data進行數據庫開發的時候可以同時訪問多達30個數據庫;相信這個配置時是完全可以滿足大部分應用的需要,如果不夠當然可以聯系我或自己下載代碼修改一下:)
執行SQL
配置好數據訪問上下文后,執行SQL語句就會變得很方便.
- 執行SQL並填充到對象列表
Query<IList<Employee>> query = "select * from employees"; foreach (Employee item in query.Value) { }組件會把字段名和對象屬性名稱一致的自動匹配並填充相應的值;填充的實體需要描述嗎?不需要組件會在運行期處理.是使用反射填充嗎?不會組件同樣會在運行期內生成對應用的代理方法代替反射操作.- 在很多時候我們需要查詢一條記錄
Query<Employee> query = "select * from employees where EmployeeID=3"; string firstname = query.Value.FirstName;- 如果需要執行一個統計
Query<int> query = "select count(*) from employees"; int count = query.Value;- 有時候查詢需要動態組合
由於很多時候SQL都是動態組合,因此組件提供了一個SQL對象來處理這些情況.DateTime? start=null, end=null; SQL sql = "select * from orders where 1=1"; if (start != null) sql=sql["start",start.Value] +" orderdate >=@start"; if(end !=null) sql = sql["end", end.Value] + " orderdate <@end"; Query<IList<OrderBase>> query = sql;
執行存儲過程
組件調用存儲過程需要用對象來描述.
- 存儲過程
ALTER PROCEDURE [dbo].[CustOrderHist] @CustomerID nchar(5) AS SELECT ProductName, Total=SUM(Quantity) FROM Products P, [Order Details] OD, Orders O, Customers C WHERE C.CustomerID = @CustomerID AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID GROUP BY ProductName- 描述結構
[Proc] public class CustOrderHist:StoredProcedure { [ProcParameter] public string CustomerID { get; set; } }可以簡單地通過承繼StoreProcedure類來實現一個存儲過程描述,通過Proc屬性來描述存儲過程名稱,缺省情況下存儲過稱名稱是相應的類名稱;ProcParameter用於描述存儲對應的存參數,可以通過Direction來設置參數的類型,以是參數為輸出和返回類型的時,對象在執行完成后通過訪問相關屬性值即可得到相應的輸出或返回值.- 執行存儲過程
CustOrderHist coh = new CustOrderHist(); coh.CustomerID = "ALFKI"; Query<IList<OrderHist>> query = coh;只需要簡單把描述對象設置給相應的查詢對象即可.
以上就是組件使用SQL和存儲的情況,如果你是SQL或存儲過程的忠實fans那相信Smark.Data所提供的功能會讓你在基礎的數據操作上變得更輕松.對於偏向於對象映射操作的朋友們也不要感到失望,因為下一章節會詳細講術組件的對象映射功能,相信在對象操作上同樣也會帶來驚喜.
疑問:為什么在所有訪問操作過程都沒看到指定DB的信息?
其實組件會默認使用第一個配置的DBContext,所以操作在不指定DBContext的情況下都是使用它.
