.net中更新已存在表字段的解决方法

最近碰到这样的问题:已存在的表,其中有加密的密码(原初始密码为11111),现要求把原初始密码随机生成,不使用原初始密码。为了导出方便,我决定用datagrid,然后导出到excel.

其思路有二种,一种通过先展示datagrid,然后再通过按钮生成随机码及加密密码,不过,客户操作比较烦琐;另一种 直接通过按钮生成表,包括密码及加密密码。

第二种方案的作法如下:在数据库users表增加一字段(没加密前的密码),在显示datagrid之前进行逻辑操作来生成随机密码及加密密码。

rndpwd.aspx.cs关键代码如下:

 private void Page_Load(object sender, System.EventArgs e)
  {
   if (!IsPostBack )
   {
    updatebase();  //生成随机密码
    refreshGrid(); //通过datagrid展现页面
   }

  }

private void updatebase()
  {
   new BizLogic.Rndpwd().updatepwd();;
   
  }
  private void refreshGrid()
  {
   DataView dv;
   components.DBUsers users=new components.DBUsers();
   
   if (ViewState ["deptCode"].ToString()=="0")
   {
    dv=users.select_AllUsers1();
    gridDeptUser.DataSource=dv;
   }
   else
   {
    dv=users.select_usersUnder_Deptcode_withSubDept  (ViewState["deptCode"].ToString());
    gridDeptUser.DataSource=dv;
   }
   gridDeptUser.DataBind();
  }

 其逻辑和数据层的关键代码如下,其思路先计算出有多少列,并记录第一条记录的id,然后通过for语句,对每一条记录进行更新,生成随机码函数的方法较多,这里仅提供一种:

 public void updatepwd()
  {
   SqlConnection myConn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]);
   string sql="select * from users" ;
   SqlDataAdapter myCommand=new SqlDataAdapter(sql ,myConn);
   DataSet ds = new DataSet();
   myCommand.Fill(ds);
   DataView dv = ds.Tables[0].DefaultView;
   for( int i = 0 ;i < dv.Count ; i++)
   {
    string deptcode=ds.Tables[0].Rows[i][0].ToString();
    string rand=CreateRandomCode(5);
    SqlConnection myConn1=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]);
       SqlCommand myCommand1=new SqlCommand("update users set rndpwd='"+rand+"',password='"+authPassword(rand)+"' where usercode='"+deptcode+"'",myConn1);
    try
    {
     myCommand1.Connection.Open();
     myCommand1.ExecuteNonQuery();
    }
    catch (Exception e)
    {
     throw new Exception("更新记录时产生错误,错误代码为:" + e.ToString());
    }
    finally
    {
     myCommand1.Dispose();
     myConn1.Close();
     myConn1.Dispose();
    }
   }
   
  }

  private   string   CreateRandomCode(int   codeCount)   //根据时间来生成随机函数,会有一定的重复,需改进。
  {  
   string   allChar   =   "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"   ;  
   string[]   allCharArray   =   allChar.Split(',');  
   string   randomCode   =   "";  
   int   temp   =   -1;  
   
   Random   rand   =   new   Random();  
   for(int   i   =   0;   i   <   codeCount;   i++)  
   {  
    if(temp   !=   -1)  
    {  
     int   s=i*temp*((int)DateTime.Now.Ticks);  
     int   ss=s;  
     rand   =   new   Random(i*temp*((int)DateTime.Now.Ticks));  
    }  
    int   t   =   rand.Next(35);  
    if(temp   ==   t)  
    {  
     return   CreateRandomCode(codeCount);  
    }  
    temp   =   t;  
    randomCode   +=   allCharArray[t];  
   }  
   return   randomCode;  
  }  

随机数类System.Random类提供以下方法用于产生各种满足不同要求的随机数,如表1所示:

  表1    System.Random类提供的各种方法

编号
方法名称
功能描述
1
Next()
返回一个0~2147483647之间的整数
2
Next(i)
返回一个0~i之间的整数
3
Next(i,j)
返回一个i~j之间的整数
4
  Nextdouble()
返回一个0~1之间的随机小数
5
 Nextdouble(  byte())
用0~255之间的随机整数作为字节数组各元素的值。

  使用随机数类System.Random必须先声明。如果要使用Nextbytes(byte())方法,在使用前也必须声明字节数组。

第一种方案,可通过显示出来的id,进行更新操作。未具体实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值