随机字符串生成器c#的更新语句

时间:2016-08-10 03:13:56

标签: c# sql oracle

我正在尝试使用随机生成器更新用户密码。 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 + '";

我错过了什么?

2 个答案:

答案 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