C# 带有随机字符串生成器c的update语句#
我正在尝试使用随机生成器更新用户密码。update语句本身是一个相当简单的语句,但有case语句,因此根据用户的不同,他们将获得此特殊密码 我的代码用于生成随机值并更新记录,但是,它使用相同的密码更新所有记录,而不是为每个需要更新的记录生成一组新的随机值(在任何给定时间更新/创建的密码数量未知) 如果需要循环,如何将循环与SQL语句集成 下面是代码的大致示例:C# 带有随机字符串生成器c的update语句#,c#,sql,oracle,C#,Sql,Oracle,我正在尝试使用随机生成器更新用户密码。update语句本身是一个相当简单的语句,但有case语句,因此根据用户的不同,他们将获得此特殊密码 我的代码用于生成随机值并更新记录,但是,它使用相同的密码更新所有记录,而不是为每个需要更新的记录生成一组新的随机值(在任何给定时间更新/创建的密码数量未知) 如果需要循环,如何将循环与SQL语句集成 下面是代码的大致示例: string colors[] = {"green", "blue", "yellow", "black"}; random r = n
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 + '";
我缺少什么???您需要在更新查询中使用
where
条件来更新某些特定记录(让它成为用户名
)。然后将密码保存为纯文本将不是一个好的选择,所以我建议您使用一些加密。另一个提示是必须将随机变量声明为全局变量
通过以下代码可以实现完整的功能:
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
您不太清楚如何处理每个用户的密码更新。按照现在的代码设置方式,您可以一次性更新整个表,而无需任何循环。我认为你不应该对它不起作用感到惊讶 如果您确实对使用4种颜色中的一种随机更新表中的所有密码感兴趣,我将使用一个
update
语句而不是循环:
更新tbl
设置pwd=案例abs(mod(dbms_random.random,4))
当0时,则为“绿色”
当我说“蓝色”
当2时,则为“黄色”
当3时,则为“黑色”
终止
您的目标是使用随机值一次性更新表中的所有密码吗?或者你只想更新某个用户列表?@sstan问题是,它用相同的密码更新所有记录,而不是为每个记录生成一组新的随机值
@Sherlock:这说明了发生了什么,而不是她的意图。关于如何更新数据库中的单个记录,还有很多问题,如何处理SQL中的密码,如何正确生成随机数,。。。您可能希望显示真实的,而不是粗糙的样本,它没有显示任何关于您计划如何更新单个记录的指示。我不喜欢这样,因为它很难维护,很难添加更多colors@un-lucky:我看不出这比OP目前拥有的更难维护,它比任何需要在一个循环中执行多个update
语句的解决方案都要快得多。但是谢谢你的反馈。很好,我错了。更好的解决方案