下面是一个名为Password_Click
的按钮事件处理程序。当您单击此按钮时,它将进入数据库并找到名为TblMaintenance
的表。进入表后,它会在表中找到字段Patrol
= True或1的所有记录,并使用系统生成的随机4位数字更新字段Password
(也在表中)。
我的问题是每行都会使用相同的随机保护密码进行更新。我希望每一行都有一个不同的随机4位数字。在这一刻,我不想这样做:
站点密码巡逻 CEP 5405 1 GNK 5405 1 ILT 5405 1 KHA 5405 1
但我希望它能做到这一点:
站点密码巡逻 CEP 4567 1 GNK 9000 1 ILT 4345 1 KHA 1278 1
protected void lnkPassword_Click(object sender, EventArgs e)
{
var random = new Random();
var i = random.Next(1000, 9999);
SqlHelper.ExecuteSqlNonQuery(@"update Tblmaintenance set
GuardPassword = @newPassword
WHERE Patrol = 1",
"newPassword", i);
}
答案 0 :(得分:2)
如果您想使用一个DML语句保留它,可以使用以下内容:
update tbl_Security set
GuardPassword = round(rand(CAST(CAST(NEWID() AS VARBINARY(4)) AS SMALLINT))* 9000,0) + 1000
WHERE Patrol = 1
它应该为符合where语句的每一行生成新的四位数字。
答案 1 :(得分:1)
如果使用DataContext(Visual Studio中的dbml),则可以使用LINQ而不是SQL来恢复记录并使用C#代码编辑它们。
DatabaseDataContext db = new DatabaseDataContext();
foreach(T2_keyHolderMaintenance t2 in (from t2 in db.T2_keyHolderMaintenances where t2.ManageGuardPatrol == true select t2).ToList())
{
t2.GuardPassword = Math.Random() //or whatever you want to do
}
db.SubmitChanges();
答案 2 :(得分:1)
您的问题的一些解决方法可能是:
protected void lnkUpdateGuardPassword_Click(object sender, EventArgs e)
{
//command = query to select all the yard codes.
List<string> YardCodes = new List<string>();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
YardCodes.Add(reader["YardCode"].ToString());
}
var random = new Random();
foreach (var yardcode in YardCodes)
{
var i = random.Next(1000, 9999);
SqlHelper.ExecuteSqlNonQuery(@"update T2_SecurityKeyHolder set
GuardPassword = @newPassword
WHERE YardCode = @yardcode",
"newPassword", yardcode, i);
}
}
这将首先得到所有的码数(假设它们是唯一的),然后为每个码码设置一个随机码。
答案 3 :(得分:0)
问题是你的SQL语句。它正在更新ManagedGuardPatrol值等于1的所有记录。每次调用click事件时,它们都将具有相同的GuardPassword值。您需要使用YardCode来识别要更新的记录。
为了澄清,随机数在C#中生成并传递到SQL语句一次。这个相同的值通过所有匹配的行传播。
i = 4505; // a number that was randomly generated ONCE.
您的SQL语句变为:
update T2_SecurityKeyHolder
set GuardPassword = 4501
WHERE ManagedGuardPatrol = 1
使用一个随机值更新所有匹配记录。
如果我能想出更明确的解释方法,我会的。目前,足以说明,您只生成一个具有一个固定值的SQL语句。
答案 4 :(得分:0)
protected void lnkPassword_Click(object sender, EventArgs e)
{
SqlHelper.ExecuteSqlNonQuery(@"update Tblsecurity set
Password = abs(checksum(NewId())) % 10000
WHERE Patrol = 1");
}
或
protected void lnkUpdateGuardPassword_Click(object sender, EventArgs e)
{
SqlHelper.ExecuteSqlNonQuery(@"update Tblsecurity set
Password = ROUND(((9999 - 1000 -1) * RAND() + 1000), 0)
WHERE Patrol = 1");
}