我正在尝试使用随机生成器更新用户密码。 update语句本身是一个相当简单的语句,但有case语句,因此根据用户的不同,他们将获得这个特殊的密码。
我的代码用于生成随机值并更新记录,但是,它使用SAME密码更新所有记录,而不是为每个需要更新的记录生成一组新的随机值(将会有未知数量)在任何给定时间更新/创建的密码)。
如果我需要一个循环,我该如何将循环与SQL语句集成?
以下是代码的ROUGH示例:
string colors[] = {"green", "blue", "yellow", "black"};
random r = new Random();
int index= r.Next(0, colors.Length);
string color =colors[index].ToString();
query = "update table set password = '" + r.color + '";
我错过了什么?
答案 0 :(得分:2)
您不清楚如何根据每个用户处理密码更新。现在你的代码设置方式,你可以一次性更新整个表,没有任何循环。我认为你不应该感到惊讶它不起作用。
如果您实际上有兴趣使用4种颜色中的一种随机更新所有表中的密码,我会使用单个update
语句而不是循环来执行此操作:
update tbl
set pwd = case abs(mod(dbms_random.random, 4))
when 0 then 'green'
when 1 then 'blue'
when 2 then 'yellow'
when 3 then 'black'
end
答案 1 :(得分:1)
您需要在更新查询中使用where
条件来更新某些特定记录(让它成为username
)。然后将密码保存为纯文本将不是一个好的选择,所以我建议你使用一些加密。另一个提示是你必须将随机变量声明为全局变量。
完整的事情可以通过以下代码实现:
Random r = New Random(); // this will be global
String colors[] = {"green", "blue", "yellow", "black"};
int index = r.Next(0, colors.Length);
String colorPassword = colors[index].ToString(); // This will be the password
// Now encrypt the password
byte[] byteData = System.Text.Encoding.ASCII.GetBytes(colorPassword);
byteData = new System.Security.Cryptography.SHA256Managed().ComputeHash(byteData );
String hashedPassword = System.Text.Encoding.ASCII.GetString(byteData );
query = "update table set password = '" + hashedPassword + "' where username='" + your_username + "'";
// Here you can execute the query