一直在想怎么樣才能讓dbHelper更簡單,更靈活,更僵化。終于我發布了第一個開源版本的dbhelper.此helper將使用System.Data.DbHelper作為命名空間。采用內部驅動與內容Session的方式來進行管理。而作為使用者,你只需要作兩件事情。1、注冊一個驅動;2、繼承Dal創建自己的數據處理層。Dbhelper在進行事務操作時需要使用Lock來開啟事務;Unlock提交事務。當出錯時自動進行事務回滾(獲立事務的Dal除外)。多個Dal可以通過Group()方法將事務進行統一(即使驅動不同)。若存在多層嵌套關系,且每個Dal都有Lock,那么事務以最外層的為準。
調用方法很簡單
1、注冊驅動
DbService.Instance.RegistDriver( " sql " , config.Sql, typeof (SqlHelper)); DbService.Instance.RegistDriver( " oracle " , config.Oracle, typeof (MsOracleHelper));
2、普通查詢
public DataTable GetSource(DateTime time) { var sql = new StringBuilder() .Append( " select checktime,sn_name,badgenumber " ) .Append( " FROM checkinout c " ) .Append( " LEFT join userinfo u " ) .Append( " ON c.userid = u.userid " ) .AppendFormat( " WHERE CONVERT(VARCHAR(10),c.checktime,23)= '{0}' " , time.ToString( " yyyy-MM-dd " )); CommandText = sql.ToString(); return GetDataTable(); }
3、參數化提交
public bool SyncCardPress(DataTable source,DateTime time) { if (source == null || source.Rows.Count == 0 ) return true ; Lock(); var d = time.ToString( " yyyy-MM-dd " ); CommandText = string .Format( " delete FROM TB_ROLL_RECORD r WHERE to_char(r.presstime,'yyyy-mm-dd') = '{0}' " ,d); ExecuteNonQuery(); CommandText = " INSERT INTO TB_ROLL_RECORD VALUES(:userId,:machine,to_date(:pressTime,'yyyy-mm-dd hh24:mi:ss'),sysdate) " ; var userId = AddParameter<OracleParameter>( " userid " ); var machine = AddParameter<OracleParameter>( " machine " ); var presstime = AddParameter<OracleParameter>( " pressTime " ); foreach (DataRow row in source.Rows) { userId.SetValue(row.To < string >( " badgenumber " ).TrimStart( ' 0 ' ).PadLeft( 4 , ' 0 ' )); machine.SetValue(row.To < string >( " sn_name " )); presstime.SetValue(row.To <DateTime>( " checktime " ).ToDateTimeString()); ExecuteNonQuery(); if (! Success) { Debug.WriteLine(Error.Message); break ; } } UnLock(); return Success; }
?
4、使用存儲過程
public void Calc(DateTime time) { CommandText = " CalcAttendanceByDay " ; CommandType = CommandType.StoredProcedure; AddParameter <OracleParameter>( " xType " ).SetValue( 1 ); AddParameter <OracleParameter>( " xIds " ).SetValue( "" ); AddParameter <OracleParameter>( " xDay " ).SetValue(time.AddDays(- 1 )); AddParameter <OracleParameter>( " xCmt " ).SetValue( 1 ); Lock(); ExecuteNonQuery(); UnLock(); }
5、說明
發布版本已經去掉對CommanText的直接賦值方法,改為Prepare(.....)來進行
6、哪里有下載 點擊這里
好了,祝大家使用愉快。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
