【问题标题】:Redundancy in inserting random number in database - angularjs asp.net mvc在数据库中插入随机数的冗余 - angularjs asp.net mvc
【发布时间】:2016-11-24 02:28:49
【问题描述】:

我的angularjs controller 中有一个foreach loop

AccountController
angular.forEach($scope.accountList,function (account) {

      AccountService.insertNewAccount(account).then(function (msg)
           //some codes
      });
});

在我的 AccountController.cs 中

int accountNo = GenerateRandomNo();
var chk = db.sp_check_account_number(accountNo).ToList(); //check if there's redudancy in generated AccountNumber in Account Table
var cnt = chk.Count;
    if (cnt < 1)//If there is no redundancy
    {
        db.InsertNewAccount(name, accountNo);
    }
    else 
    {
        //if there's redundancy generate another account number
        while(cnt!=0)
        {
            accountNo = GenerateRandomNo();
            chk = db.GetROPAAccount(accountNo).ToList();
            cnt = chk.Count;
        }
        db.InsertNewAccount(name, accountNo); 
    }

    db.SaveChanges();

我在AccountController.cs 中的插入方法运行良好,但问题是当它完成插入来自$scope.accountList 数组的数据时,表记录中插入的AccountNumber 有很多冗余。我发现我的foreach loop 随机插入了数据,我不知道为什么。我还检查了我的sp_check_account_number,它工作正常。有人可以帮我弄这个吗? :(

【问题讨论】:

  • “有很多冗余”是什么意思?
  • 我们可以查看您的GenerateRandomNo() 代码吗?
  • 示例我插入了 10 条记录,大部分插入的帐号都重复或一式三份。而且我不知道为什么会这样,因为我有存储过程 sp_check_account_number 检查生成的帐号中是否存在重复
  • 这是我在GenerateRandomNo()public int GenerateRandomNo() { int min = 1000; int max = 9999; Random rdm = new Random(); return rdm.Next(min, max); }中的代码
  • 这是您的问题 - Random rdm = new Random(); - 如果快速连续调用,您通常会得到相同的种子值,因此这些值不是随机的。将此行作为类级变量移出,然后重试。到时候就可以了。

标签: c# angularjs asp.net-mvc-4 sql-server-2012


【解决方案1】:

你的问题在于GenerateRandomNo 方法。目前你有这个:

public int GenerateRandomNo()
{
    int min = 1000;
    int max = 9999;
    Random rdm = new Random();
    return rdm.Next(min, max);
}

这是您的问题 - Random rdm = new Random(); - 如果快速连续调用,您通常会得到相同的种子值,因此这些值不是随机的。将此行作为类级变量移出,然后重试。

这样做:

private Random rdm = new Random();
public int GenerateRandomNo()
{
    int min = 1000;
    int max = 9999;
    return rdm.Next(min, max);
}

另外,当您使用10009999 作为输入参数时,您将生成从10009998 的数字。第二个参数是独有的最大值。

【讨论】:

  • 你是个救命稻草。非常感谢。但是我想知道为什么我的 $scope.accountList 数组中的数据随机插入到数据库中
  • @VernonMaceda - “随机插入数据库”是什么意思?
  • 因为我测试了一些记录(例如 Test1、Test2、Test3...)。在我的foreach loop 中,数据应该根据其索引插入,但是当记录插入完成时,插入的记录不是按顺序插入的(例如 Test3、Test1、Test2)。
  • @VernonMaceda - 我不知道这里是否有问题。数据库没有记录顺序。如果您想要显示顺序,则必须在查询时明确对数据进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多