Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 系统日期更改时如何设置默认数据库值_C#_Asp.net_Visual Studio 2010 - Fatal编程技术网

C# 系统日期更改时如何设置默认数据库值

C# 系统日期更改时如何设置默认数据库值,c#,asp.net,visual-studio-2010,C#,Asp.net,Visual Studio 2010,我目前正在为我的项目制作一个银行网站,使用C#和asp.net。其中一个功能是“剩余每日限额”。一旦我将系统日期更改为另一天,我需要将数据库值更改回默认值。示例:如果一个用户的每日限额是500美元(默认值),那么他就用完了。第二天,他又会有500美元。我可以知道我该怎么做吗 默认值通常保留在某些配置文件中。就你的具体情况而言,我认为你可以 或者有一个带有默认值的表 或者在表中中,可以使用还原功能的地方,有相应值的默认列 之后,您可以使用一些存储过程来恢复它们您可以创建SQL作业,并将其计划为

我目前正在为我的项目制作一个银行网站,使用C#和asp.net。其中一个功能是“剩余每日限额”。一旦我将系统日期更改为另一天,我需要将数据库值更改回默认值。示例:如果一个用户的每日限额是500美元(默认值),那么他就用完了。第二天,他又会有500美元。我可以知道我该怎么做吗

默认值通常保留在某些配置文件中。就你的具体情况而言,我认为你可以

  • 或者有一个带有默认值的

  • 或者在
    表中
    中,可以使用还原功能的地方,有相应值的默认列


之后,您可以使用一些
存储过程来恢复它们
您可以创建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

(由于这里的实体框架,我的原始SQL技能可能有点生疏)。

下面是一个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之类的东西,可以直接调用此函数并在代码中使用值

你能分享一下你的数据库模式是什么样的,你有什么表等等。还有到目前为止你尝试过什么?这听起来更像是一个数据库设计问题,而不是C#,但我想这取决于你如何实现它。您可以在任何客户表中添加一列,说明他们的每日限额;然后你可以保留一个交易表。如果你从他们的每日限额中减去他们当天的交易总额,那么你就会知道客户还剩下多少消费价值。我不确定这是否足以算作一个答案,所以我把它作为一个评论嗨,我可以知道当我更改系统日期时,哪个部分可以自动重置值吗?@KYQ很抱歉没有回答你的问题,我昨天错过了上车。使用这种技术,您不需要为不同的日期显式重置它们的值。你存储1个值,他们每天应该使用多少,然后你存储他们的事务。然后计算一天的剩余使用量。