我目前正在使用C#和asp.net爲我的項目做一個銀行網站。其中一項功能是「剩餘每日限制」。一旦我將系統日期更改爲另一天,我需要將數據庫值更改回默認值。例如:如果用戶有500美元(默認值)作爲每日限額,並且他全部用完了。第二天,他將再次獲得500美元。我可以知道該怎麼辦?如何在系統日期更改時默認數據庫值
回答
這裏是一個SQL腳本,將創造我怎麼會設置一些樣本數據的數據庫:
CREATE TABLE tblBankCustomer
(
BankCustomerId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
, FirstName NVARCHAR(100) NOT NULL
, LastName NVARCHAR(100) NOT NULL
, DailySpendingLimit DECIMAL(38, 2) NOT NULL CONSTRAINT DF_tblBankCustomer_DailySpendingLimit DEFAULT(500)
)
CREATE TABLE tblTransactionType
(
TransactionTypeId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
, TransactionType VARCHAR(50) NOT NULL
)
INSERT tblTransactionType (TransactionType)
VALUES ('Deposit')
, ('Withdrawal')
CREATE TABLE tblTransaction
(
TransactionId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
, BankCustomerId INT NOT NULL
, TransactionDate DATE NOT NULL
, Amount DECIMAL(38, 2) NOT NULL
, TransactionTypeId INT NOT NULL
)
ALTER TABLE tblTransaction
ADD CONSTRAINT FX_tblTransaction_tblBankCustomer
FOREIGN KEY (BankCustomerId)
REFERENCES tblBankCustomer(BankCustomerId)
ALTER TABLE tblTransaction
ADD CONSTRAINT FX_tblTransaction_tblTransactionType
FOREIGN KEY (TransactionTypeId)
REFERENCES tblTransactionType(TransactionTypeId)
INSERT tblBankCustomer
(
FirstName
, LastName
)
VALUES ('Jeremy', 'Pridemore')
, ('K', 'YQ')
INSERT tblTransaction
(
BankCustomerId
, TransactionDate
, Amount
, TransactionTypeId
)
VALUES
(1, CURRENT_TIMESTAMP, 48.50, 2) -- Jeremy, Today, $48.50, Withdrawal
, (1, CURRENT_TIMESTAMP, 300.00, 2) -- Jeremy, Today, $300, Withdrawal
, (1, CURRENT_TIMESTAMP, -200.00, 1) -- Jeremy, Today, $200, Deposit
, (2, CURRENT_TIMESTAMP, 285.00, 2) -- K, Today, $285, Withdrawal
, (2, CURRENT_TIMESTAMP, 215.00, 2) -- K, Today, $215, Withdrawal
GO
CREATE FUNCTION fGetRemainingSpendingLimit
(
@BankCustomerId INT
, @Date DATE
)
RETURNS DECIMAL(38, 2)
BEGIN
SET @Date = ISNULL(@Date, CURRENT_TIMESTAMP)
DECLARE @RemainingLimit DECIMAL(38, 2) =
(SELECT
SUM([Transaction].Amount)
FROM tblBankCustomer Customer
INNER JOIN tblTransaction [Transaction]
ON [Transaction].BankCustomerId = Customer.BankCustomerId
AND [Transaction].TransactionDate = @Date
INNER JOIN tblTransactionType TransactionType
ON TransactionType.TransactionTypeId = [Transaction].TransactionTypeId
AND TransactionType.TransactionType = 'Withdrawal'
WHERE Customer.BankCustomerId = @BankCustomerId)
RETURN @RemainingLimit
END
GO
-- Some sample selects
SELECT dbo.fGetRemainingSpendingLimit(1, NULL)
SELECT dbo.fGetRemainingSpendingLimit(2, NULL)
然後在C#中,你應該知道客戶的ID爲您正在使用的客戶。如果您使用的是ADO.NET等,您可以直接調用此函數並使用代碼中的值。
嗨,但是當我更改系統日期時,我可以知道自動重置該值的哪個部分? – KYQ 2012-07-14 07:06:35
@KYQ對不起,沒有回答你的問題,我錯過了昨天的SO。使用這種技術,你不需要明確地重置他們的值爲不同的日期。您存儲1個價值,他們每天應該使用多少,以及您存儲他們的交易。然後你計算給定日期剩餘使用量是多少。 – 2012-07-16 15:32:39
默認值爲通常爲停留在某個配置文件中。在特定情況下,我會說,你可以
或有默認值的
table
或
tables
其中可能有相應恢復功能有默認列值。
後,可以使用一些stored procedure
恢復它們。
您可以創建SQL作業並安排它在每個午夜運行,在作業內您可以執行存儲過程將值重置爲$ 500。
在我看來,基於有可能在未來的其他要求,我有一個表,看起來像:
UserID AppliedOn Limit
1 1/1/2012 500
1 2/1/2012 750
這給你的極限了歷史性的觀點,你可以給給用戶或數據庫。以同樣的方式,這就是我將如何應用當前的每日限制。
UserID AppliedOn Withdrawn
1 1/10/2012 125
1 1/10/2012 225
現在在2012年1月1日,它將很容易確定什麼剩餘的限額是沒有任何工作或觸發器。再次,您將擁有可以爲其他功能進行數據挖掘的歷史價值。
SELECT
ul.Limit - uw.Sum as LimitLeft
FROM
UserLimit ul
INNER JOIN (
SELECT
UserID,
AppliedOn,
SUM(Limit) as Sum
FROM
UserLimit
Group by
UserID,
AppliedOn) uw on ul.UserID = uw.UserID
and ul.AppliedOn = uw.AppliedOn
WHERE
ul.UserID = @userID
AND ul.AppliedOn = @dateInQuestion
(由於Entity Framework的緣故,我的原始SQL技能可能有點生疏)。
- 1. 如何在Debian上永久更改系統默認日期時間?
- 2. 如何將系統時間更改爲Linux中的默認值
- 3. 更改SQL數據庫默認值
- 4. 更改calenderextender默認日期
- 5. 如何使用trunc在Oracle數據庫中更改默認日期格式?
- 6. 更改系統日期
- 7. 如何將我的系統顏色更改爲默認值?
- 8. 更改系統日期,時間
- 9. 更改asp sql數據庫的默認日期格式(存儲值的那個)
- 10. 在cakephp3中更改默認數據庫
- 11. 如何更改zencart數據庫的默認值
- 12. 播放更改默認包裝系統
- 13. Eclipse - 如何設置默認系統庫
- 14. 系統日期捕獲到數據庫
- 15. 如何在MySQL數據庫中存儲默認範圍日期?
- 16. 如何在Windows中更改默認系統java encode form?
- 17. 如何在Windows XP中更改系統默認區域設置?
- 18. 更改默認日期值,而輸入時間
- 19. 如何設置DateTimePicker默認加載當前系統日期?
- 20. 如何禁用系統更改日期和時間屬性
- 21. 在WinCE上更改系統日期/時間的任何API
- 22. mssql_connect()更改默認數據庫
- 23. 更改Bonita的默認數據庫6.5
- 24. 在更改值時加載默認值
- 25. Cakephp 3.2更改默認日期格式
- 26. 更改默認的日期上的Python
- 27. MySQL更改默認會話日期
- 28. 如何更改默認突出顯示「今日」datepicker日期
- 29. 如何在Rails 3中更改日期的默認格式?
- 30. 在mysql數據庫中使用默認值分隔存儲時間和日期
你可以分享你的數據庫模式看起來像什麼表,你有什麼等到目前爲止還嘗試過? – Nathan 2012-07-13 19:59:03
這聽起來更像是一個數據庫設計問題,而不是C#,但我想這取決於你如何實現它。你可以添加一個列到你擁有的任何客戶表,說明他們的日常限制;那麼你可以保留一個交易表。如果你從他們的每日限額中扣除他們當天的交易總和,那麼你就會知道客戶剩下多少支出。我不確定這足以作爲答案,所以我把它作爲評論。 :) – 2012-07-13 20:01:37