一直在想怎么樣才能讓dbHelper更簡單,更靈活,更僵化。終于我發(fā)布了第一個開源版本的dbhelper.此helper將使用System.Data.DbHelper作為命名空間。采用內部驅動與內容Session的方式來進行管理。而作為使用者,你只需要作兩件事情。1、注冊一個驅動;2、繼承Dal創(chuàng)建自己的數(shù)據(jù)處理層。Dbhelper在進行事務操作時需要使用Lock來開啟事務;Unlock提交事務。當出錯時自動進行事務回滾(獲立事務的Dal除外)。多個Dal可以通過Group()方法將事務進行統(tǒng)一(即使驅動不同)。若存在多層嵌套關系,且每個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、參數(shù)化提交
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、說明
發(fā)布版本已經(jīng)去掉對CommanText的直接賦值方法,改為Prepare(.....)來進行
6、哪里有下載 點擊這里
好了,祝大家使用愉快。
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

