黑马程序员_学习日记52_622三层项目(MD5、NPOI)
2012-06-23 18:40
471 查看
1.知识点:
1.1用md5处理密码
2.术语
Call Center
计算机与电信集成技术(CTI)(来电显示)
CRM(客户关系管理,Custom Relationship Management)
OA(Office Automation)办公自动化
MIS(Management Information System)信息管理系统
ERP(Enterprise Resources Planning)企业资源计划
Seat(座席)电话后面坐着的客服
(*)交换机(应用于具有成百上千的座席的大型的呼叫中心)
PK语音卡(200人以下,相当于共享上网,无需申请业务)
3.MD5算法
3.1不可逆
3.2同一个值的MD5值相同
3.3不同的值计算出来的md5值是不同的。(理论上可能重复)
3.4用vs对字符串做md5处理
3.4.1计算字符串的MD5
导入System.Security.Cryptography命名空间
//1.创建MD5对象
MD5 md5 = MD5.Create();
//2.把字符串变成byte[]
//对于中文或某些字符,采用不同编码的byte[]值是不同的,所以采用不同编码其MD5值不同
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg);
//将byte[]通过MD5计算得到新的byte[]
byte[] md5Buffer = md5.ComputeHash(buffer);
//用完后记得clear
md5.Clear();
//3.将计算后的结果直接显示为字符串
StringBuilder sb = new StringBuilder();
for(int i = 0;i < md5Buffer.Length;i++)
{
//x2:把每个数字转换为16进制,并保留两位数字
sb.Append(md5Buffer[i].ToString("x2"));
}
return sb.ToString();
3.4.2计算文件的MD5
MD5 md5 = MD5.Create();
using(FileStream fs = File.OpenRead(path))
{
byte[] md5Buffer = md5.ComputeHash(fs);
md5.Clear();
StringBuilder sb = new StringBuilder();
for(int i=0;i<md5Buffer.Length;i++)
{
sb.Append(md5Buffer[i].ToString("x2"));
}
return sb.ToString();
}
4.通过MD5实现登录
4.1设计座席表
create database [CallCenter];
use CallCenter
--座席表的设计:主键、用户名、姓名、密码。错三次锁定
...
4.2做WinForm注册界面
用户名、真实姓名、密码
4.3连数据库
添加连接字符串的配置文件
4.4写SqlHelper
4.5写注册button_Click()
...
string upwd = CommonHelper.Md5Encrypt(txtPwd.Text);
string sql =
"insert into T_Seats values(@...)"
SqlParameter[]
...
4.6写CommonHelper类,封装字符串的MD5计算方法Md5Encrypt()
4.7做WinForm登录界面
4.7.1用户名、密码
4.7.2登录的button_Click()
写法一:
string pwd = CommonHelper.Md5Encrypt(txtPwd.Text);
string sql =
"select count(*) from T_Seats where ...";
SqlParameter[]...
int i = SqlHelper.ExecuteScalar(...);
if(i>0){登录成功;}
else{失败;}
写法二:(记录Id和姓名供修改使用)
sql = "select * from T_Seats where loginId=@uid";
if(upwd == pwd)
{
//登陆成功,记录当前用户主键Id与真实姓名
GlobalHelper.currentId = reader.GetInt32(0);
GlobalHelper.realname = reader.Getstring(1);
}
4.8修改密码
登录窗体有一个修改密码的按钮,登陆成功(将主键Id记录在静态变量中)则显示该按钮,进入修改窗体
ChangePwdForm_Load()
{
}
button_Click()
{
//1、验证两次密码是否一致
if(一致)
{
//2、验证旧密码是否正确
string sql =
"select count(*) from T_Seats where autoid=@autoid and loginId=@pwd";
...
SqlParameter("autoId",GlobalHelper.currentId)
...
if(旧密码正确)
{
//3、改密码
int r_update ChangePwd()
if(r_update>0)
{
修改成功!
}
}
}
}
ChangePwd(int autoId,string pwd)
{
}
4.9建静态类GlobalHelper,记录登录用户主键
5.Excel
5.1程序处理Excel的技术
OLE Automation
把Excel当成数据库
OpenXML
NPOI
5.2NPOI组件的引入
5.3通过NPOI操作Excel
5.3.1建WinForm 读取 写入
5.3.2添加NPOI引用
5.3.3把Excel考进debug
5.3.4读取Excel
button_Click()
{
//1、读取Excel到FileStream
using(FileStream fs = File.OpenRead("ReadExcel.xls"))
{
//2、根据fs创建Workbook
using(Workbook wk =
new HSSFWorkbook(fs))
{
//循环获取工作表
//wk.NumberOfSheets获取当前工作薄中工作表个数
for(i<wk.NumberOfSheets)
{
using(Sheet sheet = wk.GetSheetAt(i))
{
//循环获取每一行
//sheet.LastRowNum获取最后一行的索引
for(r <= sheet.LastRowNum)
{
Row row = sheet.GetRow(r);
//获取行中单元格
//row.LastCellNum获取最后一个单元格索引
for(c < row.LastCellNum)
{
Cell cell = ...
cw(cell.ToString());
}
cwL();
}
}
}
}
}
}
5.3.5写入Excel
button_Click()
{
//1、创建一个新的Workbook
using(Workbook wk =
new HSSFWorkbook())
{
//2、创建一个工作表Sheet
using(Sheet sheet = wk.CreateSheet("工作表1"))
{
//3、创建行
Row row1 = sheet.CreateRow(0);
//创建cell
for(i<10)
{
row1.CreateCell(i).SetCellValue("单元格"+i);
}
//再创建一行,如果这里索引还是0,会把上一行覆盖掉
Row row2 = sheet.CreateRow(1);
row2.CreateCell(0).SetCellValue("单元格一中的值");
row2.CreateCell(1).SetCellValue("单元格二中的值");
}
//创建一个文件流
using(FileStream fs = File.Write("C:\a.xls"))
{
wk.Write(fs);
MessageBox.Show("写入成功");
}
}
}
5.4数据库与Excel的导入导出
5.4.1数据库导出到Excel
string sql =
"select * from MyStudent";
using(SqlDataReader reader = SqlHelper.ExecuteReader(...))
{
if(reader.HasRow)
{
//在这里创建一个Workbook
using(Workbook wk =
new HSSFWorkbook())
{
using(Sheet sheet = wk.CreateSheet("MyStudent"))
{
int rowIndex = 0;
while(reader.Read())
{
//Fid,FName,...
int fid = reader.GetInt32(0);
string fname = reader.IsDbNull(1)? "NULL":reader.GetString(1);
//int? 可空值类型
int? fage = reader.IsDbNull(2)? null:(int?)reader.GetInt32(2);
...
//创建Excel行
Row row = sheet.CreateRow(rowIndex);
//创建单元格
row.CreateCell(0).setCellValue(fid);
row.CreateCell(1).SetCellValue(fname);
//如果fage为一个null值,则当前创建的单元格为空单元格
if(fage == null)
{
row.CreateCell(2,CellType.BLANK);
}
else
{
row.CreateCell(2).SetCellValue((int)fage);
}
...
rowIndex++;
}
using(FileStream fs = File.OpenWrite("MyStudent.xls"))
{
wk.Write(fs);
MB.Show("数据导出成功");
}
}
}
}
else
{
MS.Show("表中没有数据")
}
}
5.4.2Excel导入到数据库
//1、读取Excel中的数据
using(FileStream fs = File.OpenRead("myStudent.xls"))
{
//根据文件流创建Workbook
using(Workbook wk =
new HSSFWorkbook(fs))
{
if(wk.NumberOfSheets > 0)
{
using(Sheet sheet = wk.GetSheetAt(0))
{
//方法二:在循环外创建sqlParameter对象
//注意:同一个参数不能让多个command对象来使用。在SqlHelper中应该有cmd.Clear();
string sql =
"insert into MyStudent values(@name,@age,@gender...)";
SqlParameter[] pms =
new SqlParameter[];
//循环读取每一行
for(int r = 0;r <= sheet.LastRowNum;r++)
{
Row row = sheet.GetRow(r);
//读取除了第0列外的每一列,第0例是自动Id
string name = row.GetCell(1).StringCellValue=="NULL"?null:row.GetCell(1).StringCellValue;
//年龄为null导出的是Blank空单元格
int? age = row.GetCell(2)==null?null:(int?)row.GetCell(2).NumericCellValue;
...
//方法一:每一行都创建SqlParameter对象
//string sql = "insert into MyStudent values(@name,@age,@gender...)";
////对于空值,在C#中是null,但通过带参的Sql向数据库中插入null,需要使用DBNULL.value
//SqlParameter[] pms = new SqlParameter[]{
// ...
// new sqlParameter("@name",name==null?DBNull.Value:(object)name),
// ...
//}
SqlHelper.ExecuteNonQuery(sql,CommandType.Text,pms);
}
MB.Show("导入成功");
}
}
}
}
//2、将数据插入数据库
问题:
1、MD5的父类可以dispose,MD5为何不行?
作业:
P23 客户资料管理。(数据库与Excel导入导出)车牌或车架号有一个重复就不导入了
1.1用md5处理密码
2.术语
Call Center
计算机与电信集成技术(CTI)(来电显示)
CRM(客户关系管理,Custom Relationship Management)
OA(Office Automation)办公自动化
MIS(Management Information System)信息管理系统
ERP(Enterprise Resources Planning)企业资源计划
Seat(座席)电话后面坐着的客服
(*)交换机(应用于具有成百上千的座席的大型的呼叫中心)
PK语音卡(200人以下,相当于共享上网,无需申请业务)
3.MD5算法
3.1不可逆
3.2同一个值的MD5值相同
3.3不同的值计算出来的md5值是不同的。(理论上可能重复)
3.4用vs对字符串做md5处理
3.4.1计算字符串的MD5
导入System.Security.Cryptography命名空间
//1.创建MD5对象
MD5 md5 = MD5.Create();
//2.把字符串变成byte[]
//对于中文或某些字符,采用不同编码的byte[]值是不同的,所以采用不同编码其MD5值不同
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg);
//将byte[]通过MD5计算得到新的byte[]
byte[] md5Buffer = md5.ComputeHash(buffer);
//用完后记得clear
md5.Clear();
//3.将计算后的结果直接显示为字符串
StringBuilder sb = new StringBuilder();
for(int i = 0;i < md5Buffer.Length;i++)
{
//x2:把每个数字转换为16进制,并保留两位数字
sb.Append(md5Buffer[i].ToString("x2"));
}
return sb.ToString();
3.4.2计算文件的MD5
MD5 md5 = MD5.Create();
using(FileStream fs = File.OpenRead(path))
{
byte[] md5Buffer = md5.ComputeHash(fs);
md5.Clear();
StringBuilder sb = new StringBuilder();
for(int i=0;i<md5Buffer.Length;i++)
{
sb.Append(md5Buffer[i].ToString("x2"));
}
return sb.ToString();
}
4.通过MD5实现登录
4.1设计座席表
create database [CallCenter];
use CallCenter
--座席表的设计:主键、用户名、姓名、密码。错三次锁定
...
4.2做WinForm注册界面
用户名、真实姓名、密码
4.3连数据库
添加连接字符串的配置文件
4.4写SqlHelper
4.5写注册button_Click()
...
string upwd = CommonHelper.Md5Encrypt(txtPwd.Text);
string sql =
"insert into T_Seats values(@...)"
SqlParameter[]
...
4.6写CommonHelper类,封装字符串的MD5计算方法Md5Encrypt()
4.7做WinForm登录界面
4.7.1用户名、密码
4.7.2登录的button_Click()
写法一:
string pwd = CommonHelper.Md5Encrypt(txtPwd.Text);
string sql =
"select count(*) from T_Seats where ...";
SqlParameter[]...
int i = SqlHelper.ExecuteScalar(...);
if(i>0){登录成功;}
else{失败;}
写法二:(记录Id和姓名供修改使用)
sql = "select * from T_Seats where loginId=@uid";
if(upwd == pwd)
{
//登陆成功,记录当前用户主键Id与真实姓名
GlobalHelper.currentId = reader.GetInt32(0);
GlobalHelper.realname = reader.Getstring(1);
}
4.8修改密码
登录窗体有一个修改密码的按钮,登陆成功(将主键Id记录在静态变量中)则显示该按钮,进入修改窗体
ChangePwdForm_Load()
{
}
button_Click()
{
//1、验证两次密码是否一致
if(一致)
{
//2、验证旧密码是否正确
string sql =
"select count(*) from T_Seats where autoid=@autoid and loginId=@pwd";
...
SqlParameter("autoId",GlobalHelper.currentId)
...
if(旧密码正确)
{
//3、改密码
int r_update ChangePwd()
if(r_update>0)
{
修改成功!
}
}
}
}
ChangePwd(int autoId,string pwd)
{
}
4.9建静态类GlobalHelper,记录登录用户主键
5.Excel
5.1程序处理Excel的技术
OLE Automation
把Excel当成数据库
OpenXML
NPOI
5.2NPOI组件的引入
5.3通过NPOI操作Excel
5.3.1建WinForm 读取 写入
5.3.2添加NPOI引用
5.3.3把Excel考进debug
5.3.4读取Excel
button_Click()
{
//1、读取Excel到FileStream
using(FileStream fs = File.OpenRead("ReadExcel.xls"))
{
//2、根据fs创建Workbook
using(Workbook wk =
new HSSFWorkbook(fs))
{
//循环获取工作表
//wk.NumberOfSheets获取当前工作薄中工作表个数
for(i<wk.NumberOfSheets)
{
using(Sheet sheet = wk.GetSheetAt(i))
{
//循环获取每一行
//sheet.LastRowNum获取最后一行的索引
for(r <= sheet.LastRowNum)
{
Row row = sheet.GetRow(r);
//获取行中单元格
//row.LastCellNum获取最后一个单元格索引
for(c < row.LastCellNum)
{
Cell cell = ...
cw(cell.ToString());
}
cwL();
}
}
}
}
}
}
5.3.5写入Excel
button_Click()
{
//1、创建一个新的Workbook
using(Workbook wk =
new HSSFWorkbook())
{
//2、创建一个工作表Sheet
using(Sheet sheet = wk.CreateSheet("工作表1"))
{
//3、创建行
Row row1 = sheet.CreateRow(0);
//创建cell
for(i<10)
{
row1.CreateCell(i).SetCellValue("单元格"+i);
}
//再创建一行,如果这里索引还是0,会把上一行覆盖掉
Row row2 = sheet.CreateRow(1);
row2.CreateCell(0).SetCellValue("单元格一中的值");
row2.CreateCell(1).SetCellValue("单元格二中的值");
}
//创建一个文件流
using(FileStream fs = File.Write("C:\a.xls"))
{
wk.Write(fs);
MessageBox.Show("写入成功");
}
}
}
5.4数据库与Excel的导入导出
5.4.1数据库导出到Excel
string sql =
"select * from MyStudent";
using(SqlDataReader reader = SqlHelper.ExecuteReader(...))
{
if(reader.HasRow)
{
//在这里创建一个Workbook
using(Workbook wk =
new HSSFWorkbook())
{
using(Sheet sheet = wk.CreateSheet("MyStudent"))
{
int rowIndex = 0;
while(reader.Read())
{
//Fid,FName,...
int fid = reader.GetInt32(0);
string fname = reader.IsDbNull(1)? "NULL":reader.GetString(1);
//int? 可空值类型
int? fage = reader.IsDbNull(2)? null:(int?)reader.GetInt32(2);
...
//创建Excel行
Row row = sheet.CreateRow(rowIndex);
//创建单元格
row.CreateCell(0).setCellValue(fid);
row.CreateCell(1).SetCellValue(fname);
//如果fage为一个null值,则当前创建的单元格为空单元格
if(fage == null)
{
row.CreateCell(2,CellType.BLANK);
}
else
{
row.CreateCell(2).SetCellValue((int)fage);
}
...
rowIndex++;
}
using(FileStream fs = File.OpenWrite("MyStudent.xls"))
{
wk.Write(fs);
MB.Show("数据导出成功");
}
}
}
}
else
{
MS.Show("表中没有数据")
}
}
5.4.2Excel导入到数据库
//1、读取Excel中的数据
using(FileStream fs = File.OpenRead("myStudent.xls"))
{
//根据文件流创建Workbook
using(Workbook wk =
new HSSFWorkbook(fs))
{
if(wk.NumberOfSheets > 0)
{
using(Sheet sheet = wk.GetSheetAt(0))
{
//方法二:在循环外创建sqlParameter对象
//注意:同一个参数不能让多个command对象来使用。在SqlHelper中应该有cmd.Clear();
string sql =
"insert into MyStudent values(@name,@age,@gender...)";
SqlParameter[] pms =
new SqlParameter[];
//循环读取每一行
for(int r = 0;r <= sheet.LastRowNum;r++)
{
Row row = sheet.GetRow(r);
//读取除了第0列外的每一列,第0例是自动Id
string name = row.GetCell(1).StringCellValue=="NULL"?null:row.GetCell(1).StringCellValue;
//年龄为null导出的是Blank空单元格
int? age = row.GetCell(2)==null?null:(int?)row.GetCell(2).NumericCellValue;
...
//方法一:每一行都创建SqlParameter对象
//string sql = "insert into MyStudent values(@name,@age,@gender...)";
////对于空值,在C#中是null,但通过带参的Sql向数据库中插入null,需要使用DBNULL.value
//SqlParameter[] pms = new SqlParameter[]{
// ...
// new sqlParameter("@name",name==null?DBNull.Value:(object)name),
// ...
//}
SqlHelper.ExecuteNonQuery(sql,CommandType.Text,pms);
}
MB.Show("导入成功");
}
}
}
}
//2、将数据插入数据库
问题:
1、MD5的父类可以dispose,MD5为何不行?
作业:
P23 客户资料管理。(数据库与Excel导入导出)车牌或车架号有一个重复就不导入了
相关文章推荐
- 黑马程序员_学习日记78_806图书商城项目纪要
- 黑马程序员_学习日记79_807图书商城项目纪要
- 黑马程序员_学习日记81_810图书商城项目纪要
- 黑马程序员_学习日记55_628三层项目(用类封装用于拼接的where条件语句、写代码生成器)
- 黑马程序员_学习日记82_811图书商城项目纪要
- 黑马程序员_学习日记56_629三层项目(邮件收发、三层总结、HTML)
- 黑马程序员_学习日记80_808图书商城项目纪要
- 黑马程序员_学习日记83_812图书商城项目小结
- 黑马程序员_学习日记30_winphone7开发_项目的基本档案结构
- 黑马程序员_学习日记53_625三层项目(FTP相关操作、递归TreeView、三层结构)
- 黑马程序员_学习日记54_626三层项目(三层案例)
- 黑马程序员 注解学习日记
- 黑马程序员 类加载器和代理类学习日记
- 黑马程序员_java学习日记_交通管理系统
- 黑马程序员[andriod]java基础学习日记四——面向对象的总结
- 黑马程序员——学习日记12 java线程同步
- 黑马程序员--Java学习日记之网络编程
- 黑马程序员—JAVA基础学习日记十——反射学习总结
- 黑马程序员-学习日记(多线程间的通信)
- 黑马程序员-----学习日记<4>----基础总结