zoukankan      html  css  js  c++  java
  • 实习虚拟项目过程

    1.使用脚本限制输入(只能是数字)
    以下在Textbox下调用增加事件
    onkeyup="if(isNaN(this.value))this.value='Format error!'


    2.对密码加密的问题(hash.c)
    准备好一个加密的类
    using System;
    using System.IO;
    using System.Text;
    using System.Security.Cryptography;

    public class Hash
    {
        
    private HashAlgorithm mCryptoService;
        
    private ServiceProviderEnum mAlgorithm;

        
    public enum ServiceProviderEnum : int
        
    {
            
    // 支持的hash算法
            SHA1,
            SHA256,
            SHA384,
            SHA512,
            MD5
        }


        
    public Hash()
        
    {
            
    // 缺省的hash算法
            mCryptoService = new SHA1Managed();
            mAlgorithm 
    = ServiceProviderEnum.SHA1;
        }


        
    public Hash(ServiceProviderEnum serviceProvider)
        
    {
            
    //根据ServiceProviderEnum选择一个hash算法
            switch (serviceProvider)
            
    {
                
    case ServiceProviderEnum.MD5:
                    mAlgorithm 
    = ServiceProviderEnum.MD5;
                    mCryptoService 
    = new MD5CryptoServiceProvider();
                    
    break;
                
    case ServiceProviderEnum.SHA1:
                    mAlgorithm 
    = ServiceProviderEnum.SHA1;
                    mCryptoService 
    = new SHA1Managed();
                    
    break;
                
    case ServiceProviderEnum.SHA256:
                    mAlgorithm 
    = ServiceProviderEnum.SHA256;
                    mCryptoService 
    = new SHA256Managed();
                    
    break;
                
    case ServiceProviderEnum.SHA384:
                    mAlgorithm 
    = ServiceProviderEnum.SHA384;
                    mCryptoService 
    = new SHA384Managed();
                    
    break;
                
    case ServiceProviderEnum.SHA512:
                    mAlgorithm 
    = ServiceProviderEnum.SHA512;
                    mCryptoService 
    = new SHA512Managed();
                    
    break;
            }

        }


        
    public Hash(string serviceProviderName)
        
    {
            
    try
            
    {
                
    //根据hash算法的名字选择hash算法
                switch (serviceProviderName.ToUpper())
                
    {
                    
    case "MD5":
                        serviceProviderName 
    = "MD5";
                        mAlgorithm 
    = ServiceProviderEnum.MD5;
                        
    break;
                    
    case "SHA1":
                        serviceProviderName 
    = "SHA1";
                        mAlgorithm 
    = ServiceProviderEnum.SHA1;
                        
    break;
                    
    case "SHA256":
                        serviceProviderName 
    = "SHA256";
                        mAlgorithm 
    = ServiceProviderEnum.SHA256;
                        
    break;
                    
    case "SHA384":
                        serviceProviderName 
    = "SHA384";
                        mAlgorithm 
    = ServiceProviderEnum.SHA384;
                        
    break;
                    
    case "SHA512":
                        serviceProviderName 
    = "SHA512";
                        mAlgorithm 
    = ServiceProviderEnum.SHA512;
                        
    break;
                }

                mCryptoService 
    = (HashAlgorithm)CryptoConfig.CreateFromName(serviceProviderName);
            }

            
    catch (Exception ex)
            
    {
                Console.WriteLine(ex.Message);
            }

        }


        
    //hash一个文件
        public string HashFile(string filePath)
        
    {
            
    string hashCode = null;

            
    try
            
    {
                FileStream fs 
    = File.Open(filePath, FileMode.Open, FileAccess.Read);
                
    byte[] encodedBytes = this.mCryptoService.ComputeHash(fs);
                hashCode 
    = BitConverter.ToString(encodedBytes).Replace("-""");
                fs.Close();
            }

            
    catch (Exception ex)
            
    {
                Console.WriteLine(ex.Message);
            }


            
    return hashCode;
        }


        
    //hash一个字符串
        public string HashString(string originalPassword)
        
    {
            
    byte[] originalBytes;
            
    byte[] encodedBytes;
            
    string hashCode = null;

            
    try
            
    {
                originalBytes 
    = System.Text.UTF8Encoding.UTF8.GetBytes(originalPassword);
                encodedBytes 
    = this.mCryptoService.ComputeHash(originalBytes);
                hashCode 
    = BitConverter.ToString(encodedBytes).Replace("-""");
            }

            
    catch (Exception ex)
            
    {
                Console.WriteLine(ex.Message);
            }


            
    return hashCode;
        }


       
    }

    然后实例化 调用加密方法就OK了。

    3.网站发布时一定要用SA验证发布,不要用WINDOWS认证,否则发布后数据库连接不上
    连接字符串例:
    "Data Source=LONDY-HUANG;Initial Catalog=LMS_Database;User=sa;Password=789800";


    4.计算两日期的相差天数可以用到
    sql="select StartDateTime,EndDateTime,datediff(day,StartDateTime,EndDateTime) days from LeaveInformation where LeaveID="+leaveID
    或者用到
        public string Calculate(string start, string end)
        
    {
            DateTime dtStart 
    = Convert.ToDateTime(start);
            DateTime dtend 
    = Convert.ToDateTime(end);
            TimeSpan ts 
    = dtend - dtStart;
            
    return ts.Days.ToString();
        }
    其中start为开始日期,end为结束日期

    5.分离字符串用到spit
    若分离字符串"1,3,4,2,5",再将分离出来的数字进行排序
    string s="1,3,4,2,5";
    stirng [] c
    =spit(',');
    int temp=0;
    for(int i=0;i<c.length()-1;i++)
    {
          
    if(c[i]>[i+1])
         
    {
               c[i]
    =temp;
               temp
    =c[i+1];
               c[i
    +1]=c[i];
          }

    }
    6.datagrid或者dataview实现单选按扭选择  (原理:将textbox转成Radio button)
                if (e.Row.RowType == DataControlRowType.DataRow) //找到数据行时
                {
                    Label lb 
    = (Label)e.Row.FindControl("lblRad");
                    lb.Text 
    = "<input type='radio' name='my' value=" + e.Row.Cells[1].Text + ">"//动态添加Radio button
                   
                }

    然后在你要的地方 接收传过来的value值 就OK了,这个value值可以是datagrid或者dataview一行中的一个单元表格内容,上面就取得第二列表格的值。

    7.用泛型做一个查询的基类,主要两个用途:一个作为bool值返回 用于判断数据是否存在,另一个作为dataset值返回,用于数据的输出。
        /// <summary>
        
    /// 执行查询的SQL语句
        
    /// </summary>
        
    /// <param name="sql">SQL语句</param>
        
    /// <returns>返回查询结果的泛型</returns>

        public T SelectSql(string sql)
        
    {
                Open();
                
    int result;
                
    bool b=true;
                
    object temp;
                DataSet ds 
    = new DataSet();
                SqlDataAdapter da 
    = new SqlDataAdapter(sql, Conn);
                result 
    = da.Fill(ds);
                T t 
    = new T();
                
    if (t.GetType().Equals(result.GetType()))
                
    {
                    temp 
    = result;
                    t 
    = (T)temp;
                    
    return t;
                }

                
    else if(t.GetType().Equals(ds.GetType()))
                
    {
                    temp 
    = ds;
                    t 
    = (T)temp;
                    
    return t;
                }

                
    else if (t.GetType().Equals(da.GetType()))
                
    {
                    temp 
    = da;
                    t 
    = (T)temp;
                    
    return t;
                }

                
    else if (t.GetType().Equals(b.GetType()))
                
    {
                    
    if (result == 1)
                    
    {
                        temp 
    = true;
                        t 
    = (T)temp;
                        
    return t;
                    }

                    
    else
                    
    {
                        temp 
    = false;
                        t 
    = (T)temp;
                        
    return t;
                    }


                }

                
    else
                
    {
                    temp 
    = false;
                    t 
    = (T)temp;
                    
    return t;
                }

        }

    其中里面open()是自己写的打开数据库连接的方法

    8.实现删除按扭 的确认提示
    在Page_Load里面加入一个按扭属性就可以了
            //为删除添加确定提示
            btnDelete.Attributes.Add("onclick""return confirm('Are you sure?');");
    其中btnDelete是删除按扭的ID

    9.解决Response.Write()与Response.Redirect()在一起的问题,即一般用javascript里面的alert()方法弹出警告提示,再进行页面跳转或者叫做页面重定位时(也可以用来刷新原来页面),看不到alert()提示,而直接跳转。解决方法直接用Response.Write()来解决问题。
                Response.Write("<script>alert('successed');");
                Response.Write(
    "self.location.href='page2.aspx';</script>");

    10.关于同步操作问题,如:一个请假系统,一个用户在删除自己假单同时,另一个用户对该用户该假单进行批准操作。解决方法就在批准与删除操作的时候,再查询下数据库,判断是否还存在。

    11.做一个漂亮的dataview鼠标经过动态效果
            if (e.Row.RowType == DataControlRowType.DataRow)
            
    {
                e.Row.Attributes.Add(
    "onmouseover""currentcolor=this.style.backgroundColor;this.style.backgroundColor='#C0C0FF';this.style.cursor='hand';");
                
    //当鼠标移走时还原该行的背景色
                e.Row.Attributes.Add("onmouseout""this.style.backgroundColor=currentcolor");
            }

    用一下就知道效果了

    12.电子邮件的发送
        public void SendMail(string mailTo,string content)
        
    {
            MailMessage MyMsn 
    = new MailMessage();
            MyMsn.From 
    = new MailAddress("Youremailaddress""displayname");
            MyMsn.To.Add(mailTo);
            MyMsn.Subject 
    = "Your Subject!";
            MyMsn.Body 
    = content;

            SmtpClient smtp 
    = new SmtpClient("mailserver");
            smtp.Credentials 
    = new NetworkCredential("User""Password");
            smtp.Send(MyMsn);
        }

    主要是定好1.信件内容,2.邮件发送服务器,验证登陆,3.发送 信件内容就行了
    我这里是根据传过来的要发送到的邮件地址和要发送邮件内容进行发送。
  • 相关阅读:
    解决VSCode黑屏和终端空白无法输入的问题
    source map文件还原
    npm下载很慢的解决办法
    清理sqlserver2014的日志
    浏览器横向打印
    Vue3 diff的最长递增子序列 算法详解
    白话科普系列——网站靠什么提升加载速度?
    微服务架构下 CI/CD 如何落地
    网骗欺诈?网络裸奔?都是因为 HTTP?
    有赞统一接入层架构演进
  • 原文地址:https://www.cnblogs.com/lang/p/878952.html
Copyright © 2011-2022 走看看