我目前正在为我的项目使用C#和asp.net做一个银行网站。其中一项功能是“剩余每日限额”。一旦我将系统日期更改为另一天,我需要将数据库值更改回默认值。示例:如果用户将$ 500(默认值)作为每日限制,并且他全部使用了。第二天,他将再次获得500美元。我可以知道我该怎么办呢?
答案 0 :(得分:0)
默认值通常保留在某个配置文件中。在你的具体情况下,我会说你可以
或者table
使用默认值
或tables
中可能还原功能的默认列具有相应的值。
之后,可以使用某些stored procedure
恢复它们。
答案 1 :(得分:0)
您可以创建SQL作业并安排它每隔午夜运行一次,在您可以执行存储过程的作业中重置值为$ 500。
答案 2 :(得分:0)
在我看来,基于未来可能还有其他要求,我会有一个表格如下:
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技能可能有点生疏)。
答案 3 :(得分:0)
这是一个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这样的东西,你可以直接调用这个函数并使用代码中的值。