標籤:
三章 應用
20節
客戶表登陸
//動軟--單表--Models
--建立.net項目--簡單三層管理--DBUtity--DbHelper.cs
21節
客戶表資料讀取
增加 CEnterprise(企事業單位;事業),CBirthday
22-24節
客戶表添加、修改、刪除
;select @@IDENTITY //返回剛插入的id
25節
補充MD5
using System.Security.Cryptography;
byte[] inBytes=Encoding.Default.GetBytes(str);
MD5 md5=new MD5CryptoServiceProvider();
byte[] outBytes=md5.ComputeHash(inBytes);
string lastStr=BitConverter.ToString(outBytes).Replace("-","");
26節
Excel簡介
//18數字預設右邊,可以選擇儲存格式
Workbook--sheet--row--cell
//123前面加‘123 變成以文本形式儲存
net程式處理Excel的技術:
OLE Automation:微軟提供的,必須裝Excel
Microsoft.Jet.OleDb:微軟提供的,不用裝Excel
OpenXML:只能處理xlsx docx pptx(為什麼加個x,因為office2007及以後都支援xml開啟檔案,易於儲存檔案格式)
NPOI:程式員自己開發的,開源; 不依賴Excel,節省了資源,沒有安全性、效能的問題;
在ASP.NET中最適合,因為不用單獨開一個進程就可以來處理Excel檔案; 只能處理xls,不支援xlsx,(但現在新版本也可以支援xml開啟的xlsx)
//百度--npoi--開源中國製作的npoi
27節
NPOI讀資料
(姓名,年齡,連絡方式,郵箱)
//Sheet右鍵改名字
//建立一個Console項目 NPOITest.csProj
//1首先引入npoi操作的程式集
引用 NPOI.dll Ionic.Zip.dll
using NPOI.SS.UserModel; //包含對excel進行操作的方法
using NPOI.HSSF.UserModel; //包含excel每個sheet的屬性
using (Stream stream = new FileStream("workbook1.xls", FileMode.Open))
{
IWorkbook workbook = new HSSFWorkbook(stream); //根據流執行個體化一個workbook
//Console.WriteLine(workbook.NumberOfSheets); //通過索引獲得sheetName
for (int i = 0; i < workbook.NumberOfSheets;i++ )
{
ISheet sheet = workbook.GetSheetAt(i); //在指定index處獲得sheet對象
Console.WriteLine(sheet.SheetName);
//獲得row
//Console.WriteLine(sheet.LastRowNum);
for (int j = 0; j < sheet.LastRowNum;j++ )
{
IRow row = sheet.GetRow(j);
//獲得cell
List<ICell> listICells = row.Cells; //獲得行的所有cell對象
foreach(ICell cell in listICells)
{
Console.Write(cell.ToString() + "\t");
}
Console.WriteLine();
}
Console.WriteLine();
}
}
28節
NPOI寫入資料
//建立一個workbook
IWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("如鵬"); //建立sheet
IRow row = sheet.CreateRow(0); //建立row
ICell cell = row.CreateCell(0); //建立cell
cell.SetCellValue("rocky");
cell.SetCellType(CellType.STRING); //設定cell資料類型
//
using(Stream stream=File.Open("",FileMode.OpenOrCreate))
{
workbook.Write(stream);
}
Console.WriteLine("ok");
29節
項目匯出
DAL:
CustomerInfoesToExcel()
//查詢資料表
//建立workbook
//建立sheet
//每個reader.Read() 或dt.Rows 建立一個行
//建立首行
IRow headerRow=sheet.CreateRow(0);
for(int i=0;i<reader.FieldCount;i++)
{
//string fileName=reader.GetName(i);
ICell cellName=headerRow.CreateCell(i);
cellName.SetCellValue(reader.GetName(i));
}
int index=1;
while(reader.Read())
{
IRow row=sheet.CreateRow(index);
for(int i=0;i<reader.FieldCount;i++)
{
ICell cell=row.CreateCell(i);
cell.SetCellValue(reader.GetValue(i).ToString());
}
index++;
}
reader.Close();
using(Stream stream=File.Open("",FileMode.OpenOrCreate))
{
workbook.Write(stream);
}
30-31節
項目匯入 -----------------------------------------------------------------------------------------------------------------------(*)
public void CustomerInfoesFormExcel()
{
string sql = @"insert into T_CustomerInfo(CName,CPwd,CNumber,CGender,CCompany,CDate,CMobile,CEmail,CAddress,DelFlag)
values(@CName,@CPwd,@CNumber,@CGender,@CCompany,@CDate,@CMobile,@CEmail,@CAddress,@DelFlag)";
//SqlParameter[] param = {
// new SqlParameter(){ParameterName="@CName",Value=model.CName},...
// };
//流讀取
using(Stream stream=File.Open("workbookWrite.xls",FileMode.Open))
{
IWorkbook workbook = new HSSFWorkbook(stream);
ISheet sheet = workbook.GetSheetAt(0);
string[] parameterName = new string[sheet.GetRow(0).LastCellNum - 1]; //可以拿到最外面
//執行每一行
for (int i = 0; i <= sheet.LastRowNum;i++ )
{
IRow row = sheet.GetRow(i);
//初始化sql參數
SqlParameter[] param = new SqlParameter[row.LastCellNum - 1];
for (int j = 0; j < param.Length; j++)
{
param[j] = new SqlParameter();
}
if (i == 0) //首行
{
for (int j = 1; j < row.LastCellNum; j++)
{
ICell cell = row.GetCell(j);
parameterName[j-1] = "@" + cell.StringCellValue;
}
}
else //非首行的資料行
{
for (int j = 1; j < row.LastCellNum; j++)
{
ICell cell = row.GetCell(j);
param[j - 1].ParameterName = parameterName[j - 1];
param[j-1].Value = cell.ToString();
}
SqlHelper.ExecuteNonQuery(sql, param);
}
}
}
}
32節
漢字轉換拼音
Visual Studio International Pack
Readme.html 說明書
CHnConversionPinYins.cs
引用 ChnCharInfo.dll
using Microdoft.International.Converters.PinYinConverter
ChineseChar chn=new ChineseChar("如"); //執行個體化一個漢字字元,建構函式傳入一個漢字
//foreach(var item in chn.Pinyins) //通過屬性拿到拼音
//{
//Console.WriteLine(item); //(RU2貳聲) (RU5沒有聲調) (未知拼音)
//}
string pinyin=chin.Pinyins[0].Substring(0,chin.Pinyins[0].Length-1)
Console.WriteLine(pinyin);
foreach(cahe c in str){...} //遍曆str中每個字元
33節
簡體轉繁體
引用 ChineseConverter
using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
string traditionStr = ChineseConverter.Convert("闖將明月光", ChineseConversionDirection.SimplifiedToTraditional);
34節
遞迴初階
//方法體自己調用自己
StackOverflowException
//例1累加
35節
Treeview
//樹狀資料結構
TreeNode node=new TreeNode("Adolph")
TreeNode n1=new TreeNode("好人");
TreeNode n2=new TreeNode("帥哥");
node.Nodes.Add(n1);
node.Nodes.Add(n2);
treeView1.Nodes.Add(node);
36-37節
TreeView省市綁定、遞迴綁定城區
GetAreaList(int AreaPId=0) //如果傳參數,則為參數值;不傳參,就是0
//載入節點
private void LoadTree()
{
List<AreaFull> list = areaBll.GetAreaByAreaPid();
foreach(AreaFull area in list)
{
TreeNode node = new TreeNode(area.AreaName);
node.Tag = area.AreaId;
BindCityInfo(node,area);
treeView1.Nodes.Add(node);
}
}
//綁定城市節點
private void BindCityInfo(TreeNode node,AreaFull area)
{
List<AreaFull> list = areaBll.GetAreaByAreaPid(area.AreaId);
foreach(AreaFull city in list)
{
TreeNode nodeCity = new TreeNode(city.AreaName);
nodeCity.Tag = city.AreaId;
BindCityInfo(nodeCity,city); //可以繼續綁定載入城市下一級得區
node.Nodes.Add(nodeCity);
}
}
38節
遞迴刪除
string areaName = treeView1.SelectedNode.Text
int id = (int)treeView1.SelectedNode.Tag
//根據id刪除
private void DeleteNodesById(int id)
{
//如果是省,查詢所有城市
List<AreaFull> list = areaBll.GetAreaByAreaPid(id);
//遍曆城市,根據每個城市id查詢所有城區
foreach(AreaFull area in list)
{
DeleteNodesById(area.AreaId);
//遍曆城區,根據id刪除城區
}
areaBll.DeleteAreaFullById(id); //從最裡面往外刪除
}
39節
編輯節點
treeView1_DoubleClick()
TreeNode node=treeView1.SelectedNode;
node.BeginEdit(); //設定為可編輯狀態
BtnEditNode_Click()
nodeName
AreaId
//根據id更新地區節點
40節
添加節點
//選中一個節點,通過文字框,讓使用者輸入一個節點,把這個節點添加到該節點的子節點中
//選中節點
//獲得nodeName nodeId
//插入 insert into T(AreaName,AreaPid)
41節
三層架構總結
//CRUD增刪改查+MD5
//NPOIExcel匯入匯出
//Treeview樹節點的增刪改查
BLL中ChangePassword
homework中最後一題:
DirectoryInfo dir=new DirectoryInfo("c:\soft\a"); //執行個體化一個指定目錄
string dirName=dir.Name; //獲得目錄名稱
dir.GetDirectories() //獲得目錄下的所有直接目錄
dir.GetFiles() //獲得目錄下的所有直接檔案
//最後一題作業:---> 遍曆電腦指定檔案夾下所有的檔案和檔案夾,載入到一個樹控制項中圖片見附件
//載入樹節點
private void LoadTree()
{
DirectoryInfo dir = new DirectoryInfo(@"G:\RuPeng_YZK_150107"); //執行個體化這個檔案夾
string dirName = dir.Name;
TreeNode nodeRoot = new TreeNode(dirName);
BindDirectoryAndFile(nodeRoot, dir);
treeView1.Nodes.Add(nodeRoot);
}
//遞迴綁定載入子目錄和子檔案,nodeRoot是父節點
private void BindDirectoryAndFile(TreeNode nodeRoot, DirectoryInfo dir)
{
//獲得子目錄集合
DirectoryInfo[] directs = dir.GetDirectories();
foreach (DirectoryInfo direct in directs)
{
TreeNode node = new TreeNode(direct.Name);
nodeRoot.Nodes.Add(node);
//每一級子目錄加入父節點後調用下一級
BindDirectoryAndFile(node, direct);
}
//獲得子檔案集合
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
TreeNode node = new TreeNode(file.Name);
nodeRoot.Nodes.Add(node);
}
}
C# Application Excel TreeView