為什麼要獲得系統時間?
情景:
當教師登陸系統向資料庫中新增了工作記錄其中包括登入時間,但隨後有人更改了教師使用的計算機的時間。此後教師的所有操作也需要讀取系統時間存入資料庫。此時如果我們只用簡單度語句
**time=
date.now
讀取系統時間存入資料庫會導致教師登陸的時間晚於教師操作的時間。也就是說教師還沒有登入系統就已經作業系統的靈異事件。
當然解決這個辦法有兩個最基本的方法:
網路時間。
讀取伺服器時間。
對於讀取網路時間來說,就必須保證系統執行的環境是能訪問外網的。對於部署在區域網的系統不適用。所以我們採用方法
2.讀取伺服器時間。很簡單的**實現:
public class form1
private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
dim conn as adodb.connection
dim rs as adodb.recordset
dim datetime as date
conn = new adodb.connection
conn.connectionstring = "provider=sqloledb.1;password=密碼;persist security info=true;user id=使用者名稱;initial catalog=資料庫名;data source=伺服器ip"
conn.open()
rs = new adodb.recordset
rs.open("select getdate() as svrtime", conn, 1, 1)
datetime = rs.fields("svrtime").value
msgbox(datetime)'顯示伺服器時間
rs.close()
conn.close()
rs = nothing
conn = nothing
end sub
end class
上面的**就可以實現了。但是對於使用三層架構程式設計來說這段**當然是放在那呢。建立
connection
鏈結sqlhelper
裡完成的。
d層直接訪問
sqlhelper
、所以放在
d層合適。(
sqlhelper
的使用不在累述)但是一般情況下在
u層就需要把需要插入記錄的實體類的所有字段賦值。(一般思路)
但是我又想了。我現在是以文件為基礎,畫好圖,寫的**。這樣需要改動的地方有很多了。有沒有其他的方法呢。答案當然是有的。
方法
1:
在涉及到插入記錄中包括伺服器時間時。查詢工作放在d層。
d曾直接呼叫
d曾的方法,無需作為引數傳遞。這是最直接的方法。其實只是擺脫了思維定勢。
方法
2:
定義觸發器,當需要插入一條資訊時對於需要插入時間的列自動插入系統時間。觸發器**如下:
alter trigger [dbo].[insertcard]
on [dbo].[card]
after insert
as declare @cardno int
declare @time varchar(50)
begin
-- set nocount on added to prevent extra result sets from
-- interfering with select statements.
set nocount on;
set @time= convert(varchar(50),getdate(),121)
select @cardno =_cardno from inserted
update card set _cardstatic ='使用',_registdate =@time ,_registtime =@time ,_status ='未結賬' where _cardno =@cardno
end
缺點分析:
定義觸發器對於資料庫的依賴比較大。當需要更換資料庫時需要在新的資料庫中編寫觸發器。
定義的觸發器一旦出現錯誤,無法在系統除錯階段給出準確的提示。排除錯誤需要一定的經驗。
方法
3:
在系統第一次執行的時候讀取伺服器時間。並開始乙個
timer
,需要呼叫伺服器時間時直接用第一次讀到的時間加上
timer
走過的時間。所有的工作在
u層完成。包括計算當前伺服器時間,以及傳參過程中對實體屬性的賦值。
優點:擺脫了對資料庫的依賴。
確定:每次呼叫伺服器時間都要進行重新的計算而不是直接拿來用。
總結:以上只是個人的一些想法。不一定最好。只供參考,歡迎留下寶貴意見。
機房收費系統完美設計 引數傳遞 組合查詢
引數傳遞,是對方法而言的。在簡單的程式設計中。公用的方法是定義在模組中的。其他的類呼叫模組中的方法時需要向方法傳遞函式。私有方法是定義在各自的類中的。呼叫的時候也需要向函式中傳遞引數。但是今天我想說的是在三層架構中引數的傳遞情況。這時候對於引數的傳遞更是常見的。上一層和下一層的聯絡都是需要呼叫下一層...
機房收費系統
利用幾乎兩個多禮拜的時間,終於把機房收費系統基本完工了。這個過程中,因為有了學生系統做為鋪墊,所以做的時候還算得心應手吧。在其實也遇到了一引些問題,還是好解決的。這個系統到現在為止,也只能說是基本實現了功能,但是還很不健壯,而且漏洞我想還有很多,還有待進一步的除錯與完善。雖然在敲機房收費系統前,把命...
機房收費系統
利用幾乎兩個多禮拜的時間,終於把機房收費系統基本完工了。這個過程中,因為有了學生系統做為鋪墊,所以做的時候還算得心應手吧。在其實也遇到了一引些問題,還是好解決的。這個系統到現在為止,也只能說是基本實現了功能,但是還很不健壯,而且漏洞我想還有很多,還有待進一步的除錯與完善。雖然在敲機房收費系統前,把命...