99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C#資產(chǎn)管理系統(tǒng)開發(fā)實(shí)戰(zhàn):WinForms+SQL Server三層架構(gòu)設(shè)計(jì)

C#資產(chǎn)管理系統(tǒng)開發(fā)實(shí)戰(zhàn):WinForms+SQL Server三層架構(gòu)設(shè)計(jì) 簡(jiǎn)介企業(yè)固定資產(chǎn)管理是企業(yè)信息化建設(shè)中的基礎(chǔ)環(huán)節(jié)涉及資產(chǎn)臺(tái)賬、領(lǐng)用歸還、盤點(diǎn)折舊等多類業(yè)務(wù)場(chǎng)景。開發(fā)此類系統(tǒng)時(shí)數(shù)據(jù)庫設(shè)計(jì)決定數(shù)據(jù)一致性三層架構(gòu)決定代碼可維護(hù)性而界面技術(shù)選型則直接影響用戶操作效率。本文以C#語言為核心結(jié)合WinForms與DevExpress控件詳細(xì)講解從數(shù)據(jù)庫表設(shè)計(jì)到功能模塊實(shí)現(xiàn)的完整路徑涵蓋SQL Server腳本初始化、事務(wù)處理、權(quán)限控制等關(guān)鍵實(shí)踐并針對(duì)數(shù)據(jù)連接、并發(fā)控制、部署兼容性等高頻問題進(jìn)行剖析。無論是課程設(shè)計(jì)還是企業(yè)內(nèi)部工具這套基于三層架構(gòu)的資產(chǎn)管理系統(tǒng)源碼與設(shè)計(jì)思路都提供了可直接落地的工程參考。 做資產(chǎn)管理系統(tǒng)這個(gè)項(xiàng)目說來挺有意思。很多人覺得這不就是個(gè)增刪改查嘛但真正在企業(yè)里跑過一套完整的資產(chǎn)管理系統(tǒng)之后你會(huì)發(fā)現(xiàn)坑比想象中多得多。最近正好在整理一套基于C#的資產(chǎn)管理系統(tǒng)源碼與數(shù)據(jù)庫文件從需求分析到數(shù)據(jù)庫設(shè)計(jì)再到WinForm界面前前后后迭代了好幾個(gè)版本。這篇文章我就把整個(gè)項(xiàng)目的核心思路、表結(jié)構(gòu)設(shè)計(jì)、踩過的坑和一些關(guān)鍵代碼實(shí)現(xiàn)一次性說清楚。這個(gè)項(xiàng)目適合誰看如果你正準(zhǔn)備做課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)或者公司內(nèi)部正好有這個(gè)需求想找一個(gè)能直接跑的框架那這套系統(tǒng)的設(shè)計(jì)思路和源碼結(jié)構(gòu)都值得參考。當(dāng)然我也得提前說一句真實(shí)業(yè)務(wù)里的資產(chǎn)管理和學(xué)校里的課程設(shè)計(jì)差距真的很大文章后面我會(huì)重點(diǎn)聊這塊。1. 項(xiàng)目整體設(shè)計(jì)與思路拆解1.1 資產(chǎn)管理系統(tǒng)到底要解決什么問題先把業(yè)務(wù)場(chǎng)景聊明白。資產(chǎn)管理系統(tǒng)的核心用戶是行政、財(cái)務(wù)和IT運(yùn)維這三撥人他們?cè)谝獾狞c(diǎn)完全不一樣行政關(guān)心哪些資產(chǎn)在哪個(gè)部門、誰在用、什么時(shí)候該歸還財(cái)務(wù)關(guān)心資產(chǎn)原值多少、折舊到哪一年了、凈值還剩多少IT運(yùn)維關(guān)心這臺(tái)設(shè)備買的什么配置、過保沒有、維修過幾次一套稱職的資產(chǎn)管理系統(tǒng)必須同時(shí)滿足這三類視角的查詢和統(tǒng)計(jì)需求而不是簡(jiǎn)單做一個(gè)資產(chǎn)信息登記表。拿我做的這套系統(tǒng)來說核心訴求可以拆成四條一是資產(chǎn)臺(tái)賬統(tǒng)一管理所有固定資產(chǎn)、辦公設(shè)備、IT耗材都能入庫登記二是領(lǐng)用歸還流程可控每一件資產(chǎn)從入庫到分配再到回收全程有記錄可查三是盤點(diǎn)功能實(shí)用年底盤點(diǎn)時(shí)能快速核對(duì)賬面數(shù)量與實(shí)物數(shù)量四是統(tǒng)計(jì)報(bào)表直觀資產(chǎn)總額、部門分布、折舊情況一眼看清。這套系統(tǒng)我最終采用的界面方案是WinForms DevExpress控件庫數(shù)據(jù)庫用SQL Server 2019開發(fā)環(huán)境是Visual Studio 2022.NET Framework 4.7.2。選這個(gè)組合的原因后面細(xì)說先看整體設(shè)計(jì)。1.2 為什么選WinForms而不是WPF或Web關(guān)于界面技術(shù)選型我糾結(jié)過一段時(shí)間。WPF的界面確實(shí)好看動(dòng)畫、樣式、數(shù)據(jù)綁定都強(qiáng)于WinForms但考慮到實(shí)際使用場(chǎng)景我還是選了WinForms原因很直接第一這套系統(tǒng)的用戶是公司內(nèi)部行政和財(cái)務(wù)人員他們更看重操作效率而不是界面炫酷程度。WinForms的DataGridView做列表展示和編輯在數(shù)據(jù)量幾千條以內(nèi)的時(shí)候響應(yīng)速度非??煊脩舨恍枰却撁嫠⑿隆5诙inForms部署成本極低。直接把Release目錄下的exe和dll拷到目標(biāo)機(jī)器裝個(gè).NET Framework就能跑。WPF雖然也差不多但WPF項(xiàng)目一旦引入復(fù)雜樣式和第三方主題運(yùn)行時(shí)的兼容性問題會(huì)多一些。第三項(xiàng)目源碼的閱讀門檻低。對(duì)很多剛?cè)腴TC#的朋友來說WinForms的事件驅(qū)動(dòng)模型非常直觀——雙擊按鈕寫Click事件拖個(gè)DataGridView綁定數(shù)據(jù)源這種開發(fā)方式上手極快。WPF的MVVM模式雖然先進(jìn)但需要理解命令、綁定、依賴屬性等一系列概念學(xué)習(xí)曲線陡不少。當(dāng)然如果你的場(chǎng)景是云端部署、多人異地協(xié)同辦公那Web方案肯定更好這套系統(tǒng)定位就是局域網(wǎng)內(nèi)單機(jī)或者共享數(shù)據(jù)庫模式WinForms完全夠用。1.3 三層架構(gòu)設(shè)計(jì)讓代碼不變成一坨早期做課程設(shè)計(jì)的時(shí)候我也寫過那種所有代碼全堆在Form1.cs里的項(xiàng)目?jī)蓚€(gè)窗體之間互相new來new去改一個(gè)需求牽扯全身。這套資產(chǎn)管理系統(tǒng)我老老實(shí)實(shí)用了三層架構(gòu)UI層WinForms窗體只負(fù)責(zé)界面展示和數(shù)據(jù)收集不寫任何SQL語句BLL層業(yè)務(wù)邏輯層處理領(lǐng)用歸還流程、折舊計(jì)算、權(quán)限驗(yàn)證等業(yè)務(wù)規(guī)則DAL層數(shù)據(jù)訪問層封裝所有數(shù)據(jù)庫操作基于ADO.NET或EF Core實(shí)現(xiàn)三層之間有嚴(yán)格的依賴關(guān)系UI引用BLLBLL引用DALDAL不反向引用任何上層。有人可能會(huì)說你個(gè)幾百條數(shù)據(jù)的系統(tǒng)搞什么三層架構(gòu)不是過度設(shè)計(jì)嗎我的觀點(diǎn)是三層架構(gòu)的核心價(jià)值不在于代碼量大小而在于需求變化時(shí)你能精準(zhǔn)定位改動(dòng)范圍。舉個(gè)例子系統(tǒng)上線后財(cái)務(wù)提出資產(chǎn)折舊算法要改成當(dāng)月新增下月計(jì)提這個(gè)需求只涉及BLL層的折舊計(jì)算模塊DAL層完全不用動(dòng)。如果是單層架構(gòu)你還得在一堆窗體代碼里檢索折舊邏輯散布在哪幾個(gè)地方。1.4 功能模塊劃分整套系統(tǒng)的功能模塊我劃分成了五個(gè)部分每個(gè)部分之間有明確的數(shù)據(jù)流轉(zhuǎn)關(guān)系功能模塊核心功能點(diǎn)關(guān)聯(lián)數(shù)據(jù)表系統(tǒng)管理用戶登錄、角色權(quán)限、操作日志Sys_User, Sys_Role, Sys_Log資產(chǎn)臺(tái)賬資產(chǎn)登記、編輯、查詢、導(dǎo)入導(dǎo)出Assets, Asset_Category領(lǐng)用歸還領(lǐng)用單、歸還單、借用登記Asset_Apply, Asset_ApplyDetail維護(hù)保養(yǎng)維修記錄、保養(yǎng)計(jì)劃、報(bào)修處理Asset_Repair, Asset_Maintain盤點(diǎn)報(bào)表資產(chǎn)盤點(diǎn)、折舊統(tǒng)計(jì)、分布報(bào)表Asset_Stocktake, Asset_StocktakeDetail2. 數(shù)據(jù)庫設(shè)計(jì)與核心表結(jié)構(gòu)解析2.1 表結(jié)構(gòu)設(shè)計(jì)的幾個(gè)關(guān)鍵決策數(shù)據(jù)庫設(shè)計(jì)是整個(gè)項(xiàng)目的重中之重。我見過不少資產(chǎn)管理系統(tǒng)表設(shè)計(jì)得亂七八糟資產(chǎn)信息、領(lǐng)用記錄、維修記錄全塞一張表里時(shí)間一長(zhǎng)數(shù)據(jù)冗余到不可收拾。這套系統(tǒng)的數(shù)據(jù)庫一共設(shè)計(jì)了十幾張表核心表包括資產(chǎn)信息表、分類表、領(lǐng)用表、歸還表、維修表、盤點(diǎn)表和用戶權(quán)限表。最核心的資產(chǎn)信息表Assets我這樣設(shè)計(jì)CREATE TABLE Assets ( AssetId INT IDENTITY(1,1) PRIMARY KEY, AssetCode NVARCHAR(50) NOT NULL UNIQUE, AssetName NVARCHAR(100) NOT NULL, CategoryId INT NOT NULL, Brand NVARCHAR(50), Model NVARCHAR(50), SerialNumber NVARCHAR(100), PurchaseDate DATETIME, OriginalValue DECIMAL(18,2), NetValue DECIMAL(18,2), DepreciationRate DECIMAL(5,2), DepartmentId INT, CustodianId INT, Location NVARCHAR(200), Status INT DEFAULT 0, Remark NVARCHAR(500), CreateTime DATETIME DEFAULT GETDATE() )這里有幾個(gè)字段設(shè)計(jì)上的考量值得展開說說。AssetCode為什么必須唯一資產(chǎn)管理里最怕的就是資產(chǎn)編號(hào)重復(fù)。一物一碼是資產(chǎn)管理的基本盤不管是后續(xù)打印資產(chǎn)標(biāo)簽還是做掃碼盤點(diǎn)資產(chǎn)編碼都是唯一索引。我生成編號(hào)的規(guī)則是資產(chǎn)分類拼音首字母年月日四位流水號(hào)比如DN-20250612-0001代表2025年6月12日入庫的第一臺(tái)電腦這種規(guī)則在后續(xù)盤點(diǎn)聽到資產(chǎn)編碼就能大致判斷資產(chǎn)類型和入庫時(shí)間。NetValue為什么不直接計(jì)算凈值字段雖然可以由原值減累計(jì)折舊得出但我還是在表里專門存了一個(gè)字段。原因是折舊計(jì)算涉及折舊月份、是否已提足等多種情況在查詢列表時(shí)直接讀取字段要比每次都做子查詢快得多。當(dāng)然新增資產(chǎn)和每月折舊計(jì)提時(shí)這個(gè)凈值字段都需要做更新這是個(gè)折中的甜點(diǎn)方案。Status字段用int資產(chǎn)狀態(tài)我用int類型存儲(chǔ)0-在庫、1-已領(lǐng)用、2-維修中、3-已報(bào)廢。有人喜歡用varchar直接存中文狀態(tài)但實(shí)際開發(fā)中用int更利于做權(quán)限控制和流程判斷界面上再通過枚舉或者字典表轉(zhuǎn)換顯示文本。2.2 領(lǐng)用歸還流程的表設(shè)計(jì)資產(chǎn)領(lǐng)用歸還這部分我采用了主從表設(shè)計(jì)。Asset_Apply表存單據(jù)主信息Asset_ApplyDetail表存明細(xì)。為什么要主從表因?yàn)橐淮晤I(lǐng)用申請(qǐng)可能包含多件資產(chǎn)比如一個(gè)新員工入職一次性領(lǐng)電腦、顯示器、鍵鼠套裝三樣?xùn)|西。如果每件資產(chǎn)單獨(dú)生成一張單據(jù)那員工簽字的場(chǎng)景就非常別扭。主表結(jié)構(gòu)大致如下CREATE TABLE Asset_Apply ( ApplyId INT IDENTITY(1,1) PRIMARY KEY, ApplyNo NVARCHAR(50) NOT NULL, ApplicantId INT NOT NULL, DepartmentId INT NOT NULL, ApplyType INT DEFAULT 0, -- 0-領(lǐng)用 1-借用 2-歸還 ApplyTime DATETIME DEFAULT GETDATE(), Status INT DEFAULT 0, -- 0-待審批 1-已通過 2-已駁回 ApproverId INT, ApproveTime DATETIME, Remark NVARCHAR(500) )明細(xì)表記錄具體資產(chǎn)編號(hào)和歸還狀態(tài)CREATE TABLE Asset_ApplyDetail ( DetailId INT IDENTITY(1,1) PRIMARY KEY, ApplyId INT NOT NULL, AssetId INT NOT NULL, IsReturned INT DEFAULT 0 -- 0-未歸還 1-已歸還 )這套結(jié)構(gòu)在實(shí)現(xiàn)未歸還資產(chǎn)列表某部門資產(chǎn)占用情況這類查詢時(shí)非常舒服。你只需要根據(jù)ApplyId關(guān)聯(lián)明細(xì)表再通過AssetId關(guān)聯(lián)資產(chǎn)信息表一條JOIN就出來結(jié)果。2.3 數(shù)據(jù)庫腳本的設(shè)計(jì)與初始化數(shù)據(jù)源碼包里附帶了一個(gè)完整的數(shù)據(jù)庫腳本文件包括建表語句、索引、視圖和初始數(shù)據(jù)。這里我特別想說一下初始數(shù)據(jù)的重要性。很多初學(xué)的朋友交付項(xiàng)目時(shí)只給表結(jié)構(gòu)不給數(shù)據(jù)結(jié)果用戶打開系統(tǒng)就是一片空白連登錄都進(jìn)不去。我在這套系統(tǒng)里預(yù)置了三個(gè)角色管理員、資產(chǎn)管理員、普通用戶五個(gè)用戶賬號(hào)admin、zhangsan、lisi、wangwu、zhaoliu最常見的資產(chǎn)分類臺(tái)式電腦、筆記本電腦、顯示器、打印機(jī)、投影儀、辦公桌椅、服務(wù)器、網(wǎng)絡(luò)設(shè)備二十條左右的示例資產(chǎn)數(shù)據(jù)這樣用戶登錄后立刻能看到臺(tái)賬效果數(shù)據(jù)庫腳本使用SQL Server Management Studio直接執(zhí)行即可腳本開頭判斷了庫是否存在不存在則創(chuàng)建數(shù)據(jù)庫然后建表、插入初始數(shù)據(jù)最后創(chuàng)建幾個(gè)常用視圖和存儲(chǔ)過程。這種腳本形式比直接附加mdf文件要穩(wěn)得多不同SQL Server版本之間遷移不折騰。3. 核心功能實(shí)現(xiàn)與實(shí)操代碼3.1 數(shù)據(jù)庫連接與通用數(shù)據(jù)訪問類DAL層我封裝了一個(gè)通用的SQLHelper類核心就是通過配置文件讀取連接字符串統(tǒng)一執(zhí)行增刪改查方法。這個(gè)類看起來簡(jiǎn)單但有幾個(gè)細(xì)節(jié)值得注意。配置文件App.config中的連接字符串connectionStrings add nameAssetManagerDB connectionStringData Source.\SQLEXPRESS;Initial CatalogAssetDB;User IDsa;Password123456;MultipleActiveResultSetsTrue providerNameSystem.Data.SqlClient/ /connectionStrings這里我踩過一個(gè)大坑。最初連接字符串里的MultipleActiveResultSets沒有設(shè)置導(dǎo)致程序里一個(gè)SqlConnection上同時(shí)執(zhí)行兩個(gè)DataReader時(shí)直接報(bào)錯(cuò)已有打開的與此命令相關(guān)聯(lián)的DataReader。SQLHelper里最核心的查詢方法我這樣寫的public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) { using (SqlConnection conn new SqlConnection(connectionString)) { conn.Open(); using (SqlCommand cmd new SqlCommand(sql, conn)) { if (parameters ! null) { cmd.Parameters.AddRange(parameters); } SqlDataAdapter adapter new SqlDataAdapter(cmd); DataTable dt new DataTable(); adapter.Fill(dt); return dt; } } }注意這里的關(guān)鍵點(diǎn)using語句確保連接對(duì)象釋放SqlParameter參數(shù)化查詢防止SQL注入DataAdapter.Fill一次性將結(jié)果集加載到內(nèi)存。這套系統(tǒng)定位是幾千條數(shù)據(jù)的小型管理系統(tǒng)這個(gè)方法的性能完全夠用。但如果數(shù)據(jù)量上了十萬條需要考慮分頁和流式讀取這個(gè)后面會(huì)提。3.2 資產(chǎn)登記模塊的實(shí)現(xiàn)要點(diǎn)資產(chǎn)登記界面看起來就是個(gè)表單表格但真做起來有幾個(gè)考量點(diǎn)。首先是分類聯(lián)動(dòng)。我在窗體上放了一個(gè)ComboBox顯示資產(chǎn)分類用戶選擇大類后自動(dòng)篩選出對(duì)應(yīng)子類。這里我沒有在窗體加載時(shí)把所有分類一次性讀出來而是用了兩級(jí)聯(lián)動(dòng)查詢大類變化時(shí)重新查詢子類數(shù)據(jù)。這樣做的好處是分類特別多的時(shí)候界面響應(yīng)不會(huì)卡頓。private void LoadCategories(int parentId) { string sql SELECT CategoryId, CategoryName FROM Asset_Category WHERE ParentId parentId; DataTable dt SQLHelper.ExecuteDataTable(sql, new SqlParameter(parentId, parentId)); cboCategory.DataSource dt; cboCategory.DisplayMember CategoryName; cboCategory.ValueMember CategoryId; }然后是資產(chǎn)編號(hào)自動(dòng)生成。在點(diǎn)擊新增按鈕時(shí)我調(diào)用一個(gè)存儲(chǔ)過程來生成編號(hào)保證并發(fā)情況下也不會(huì)出現(xiàn)重復(fù)編號(hào)CREATE PROCEDURE Proc_GenerateAssetCode CategoryPrefix NVARCHAR(10), AssetCode NVARCHAR(50) OUTPUT AS BEGIN DECLARE dateStr NVARCHAR(20) CONVERT(NVARCHAR(8), GETDATE(), 112) DECLARE maxSeq INT SELECT maxSeq ISNULL(MAX(CAST(RIGHT(AssetCode, 4) AS INT)), 0) 1 FROM Assets WITH (UPDLOCK) WHERE AssetCode LIKE CategoryPrefix - dateStr -% SET AssetCode CategoryPrefix - dateStr - RIGHT(0000 CAST(maxSeq AS NVARCHAR(4)), 4) END這個(gè)存儲(chǔ)過程用了UPDLOCK鎖定遇到兩個(gè)用戶同一秒新增同類型資產(chǎn)時(shí)也能保證編號(hào)不沖突。3.3 領(lǐng)用歸還流程的狀態(tài)流轉(zhuǎn)控制資產(chǎn)領(lǐng)用和歸還看起來簡(jiǎn)單難的是狀態(tài)流轉(zhuǎn)的嚴(yán)謹(jǐn)性。比如一件資產(chǎn)已經(jīng)領(lǐng)用出去了就不能再次被領(lǐng)用已經(jīng)報(bào)廢的資產(chǎn)不能出現(xiàn)在領(lǐng)用下拉列表里。我實(shí)現(xiàn)領(lǐng)用單時(shí)采用了先選單據(jù)信息再選資產(chǎn)最后提交的三步式操作。提交時(shí)在事務(wù)中執(zhí)行兩個(gè)操作插入領(lǐng)用主表和明細(xì)表同時(shí)更新資產(chǎn)狀態(tài)為已領(lǐng)用。事務(wù)保證兩步操作要么都成功要么都失敗using (SqlTransaction trans conn.BeginTransaction()) { try { // 1. 插入主表 SqlCommand cmd1 new SqlCommand(INSERT INTO Asset_Apply(...) VALUES(...), conn, trans); // 執(zhí)行后拿到新的ApplyId // 2. 循環(huán)插入明細(xì) foreach (DataRow row in selectedAssets) { SqlCommand cmd2 new SqlCommand(INSERT INTO Asset_ApplyDetail(...) VALUES(...), conn, trans); // ... // 3. 更新資產(chǎn)狀態(tài) SqlCommand cmd3 new SqlCommand(UPDATE Assets SET Status 1 WHERE AssetId assetId, conn, trans); // ... } trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw ex; } }有同事跟我說過你這邏輯還不夠嚴(yán)謹(jǐn)因?yàn)槭聞?wù)提交之后如果程序崩潰狀態(tài)還是可能不一致。嚴(yán)格來說確實(shí)應(yīng)該引入狀態(tài)機(jī)加冪等控制但對(duì)這套內(nèi)部管理系統(tǒng)來說數(shù)據(jù)庫事務(wù)已經(jīng)能擋住99%的問題。另外領(lǐng)用的時(shí)候我在UI層還加了一個(gè)限制條件一個(gè)員工如果在未歸還資產(chǎn)里已經(jīng)有同型號(hào)的電腦再領(lǐng)電腦時(shí)彈窗提醒。這個(gè)邏輯在DAL層查一次未歸還列表就能實(shí)現(xiàn)但從產(chǎn)品角度幫用戶避免了很多重復(fù)領(lǐng)用的情況。3.4 資產(chǎn)盤點(diǎn)功能的實(shí)現(xiàn)思路盤點(diǎn)功能是資產(chǎn)管理系統(tǒng)里最有實(shí)際價(jià)值的部分但也最容易被忽略。很多初版系統(tǒng)壓根不設(shè)計(jì)盤點(diǎn)模塊但財(cái)務(wù)年底做固定資產(chǎn)盤點(diǎn)時(shí)幾十上百件資產(chǎn)一件件核對(duì)Excel表格根本不夠用。我的盤點(diǎn)功能設(shè)計(jì)是管理層發(fā)起盤點(diǎn)任務(wù)系統(tǒng)根據(jù)當(dāng)前資產(chǎn)臺(tái)賬生成盤點(diǎn)清單盤點(diǎn)人員在線下核對(duì)實(shí)物后在系統(tǒng)里標(biāo)記盤盈盤虧正常三種結(jié)果最后提交生成盤點(diǎn)差異報(bào)表。盤點(diǎn)差異的核心SQLSELECT a.AssetCode, a.AssetName, a.DepartmentId, CASE WHEN sd.DetailId IS NULL THEN 盤虧 WHEN sd.IsChecked 0 THEN 盤盈 ELSE 正常 END AS CheckResult FROM Assets a LEFT JOIN Asset_StocktakeDetail sd ON a.AssetId sd.AssetId WHERE sd.StocktakeId stocktakeId OR sd.StocktakeId IS NULL這個(gè)左連接的思路是以資產(chǎn)臺(tái)賬為基準(zhǔn)看盤點(diǎn)明細(xì)表里有沒有對(duì)應(yīng)記錄沒有記錄本身就意味著賬上有實(shí)物沒找到標(biāo)記為盤虧。3.5 權(quán)限控制與登錄模塊系統(tǒng)預(yù)置了管理員、資產(chǎn)管理員、普通用戶三個(gè)角色對(duì)應(yīng)的權(quán)限差異是功能管理員資產(chǎn)管理員普通用戶資產(chǎn)登記/編輯允許允許不允許領(lǐng)用/歸還申請(qǐng)?jiān)试S允許允許審批操作允許不允許不允許盤點(diǎn)管理允許允許不允許系統(tǒng)用戶管理允許不允許不允許登錄驗(yàn)證我用了MD5加鹽存儲(chǔ)用戶密碼而不是明文。這個(gè)基本安全常識(shí)很多人會(huì)忽略尤其是做內(nèi)部系統(tǒng)的時(shí)候覺得無所謂。實(shí)際上密碼明文存儲(chǔ)在數(shù)據(jù)庫里一旦數(shù)據(jù)庫文件泄露所有用戶的密碼就全暴露了。public static string MD5Encrypt(string input, string salt) { string combined input salt; using (MD5 md5 MD5.Create()) { byte[] bytes Encoding.UTF8.GetBytes(combined); byte[] hash md5.ComputeHash(bytes); StringBuilder sb new StringBuilder(); for (int i 0; i hash.Length; i) { sb.Append(hash[i].ToString(x2)); } return sb.ToString(); } }4. 常見問題與排查技巧實(shí)錄4.1 無法加載一個(gè)或多個(gè)請(qǐng)求的類型的經(jīng)典報(bào)錯(cuò)這個(gè)報(bào)錯(cuò)常出現(xiàn)在WinForms項(xiàng)目引用第三方DLL時(shí)。我系統(tǒng)里用了DevExpress控件在用戶機(jī)器上首次運(yùn)行時(shí)經(jīng)常蹦出這個(gè)錯(cuò)誤提示信息是有關(guān)更多信息請(qǐng)檢索LoaderExceptions屬性。排查思路先看是不是有DLL文件缺失。DevExpress的DLL數(shù)量很多發(fā)布時(shí)如果只拷貝了主exe沒拷貝依賴的DLL就會(huì)觸發(fā)。最簡(jiǎn)單的方法是用項(xiàng)目的bin\Release目錄整體拷貝不要手動(dòng)挑文件。另外一個(gè)容易被忽略的原因是版本不一致——本機(jī)開發(fā)用的DevExpress版本和部署機(jī)器上安裝的DevExpress版本不同也會(huì)導(dǎo)致加載失敗。如果必須在沒有安裝DevExpress的機(jī)器上跑兩種方案一是把用到的所有DevExpress DLL都拷到exe同目錄下二是在項(xiàng)目里把各DLL的本地復(fù)制屬性設(shè)為True讓生成時(shí)自動(dòng)輸出到目標(biāo)目錄。4.2 連接數(shù)據(jù)庫報(bào)用戶sa登錄失敗開發(fā)時(shí)我本地用的SQL Server認(rèn)證代碼里寫死sa賬號(hào)密碼但交付給別人使用時(shí)經(jīng)常連不上庫。常見原因有兩個(gè)。第一個(gè)是SQL Server的登錄模式是Windows身份驗(yàn)證不接受sa登錄。需要修改服務(wù)器屬性安全性里選擇SQL Server和Windows身份驗(yàn)證模式。第二個(gè)是SQL Server服務(wù)沒有啟用TCP/IP協(xié)議。這可以在SQL Server配置管理器里設(shè)置啟用Named Pipes和TCP/IP并重啟SQL Server服務(wù)。還有一種情況是防火墻攔了1433端口。局域網(wǎng)內(nèi)其他電腦連數(shù)據(jù)庫時(shí)Windows防火墻默認(rèn)會(huì)阻止1433端口需要在防火墻入站規(guī)則里放行。這些步驟我在項(xiàng)目文檔里都寫了但實(shí)際中還是經(jīng)常遇到用戶直接跳過不看。4.3 數(shù)據(jù)庫文件附加失敗或腳本執(zhí)行報(bào)錯(cuò)我提供的是SQL腳本而不是mdf文件原因是mdf附加到不同版本的SQL Server時(shí)經(jīng)常遭遇版本不兼容問題。但腳本執(zhí)行時(shí)也可能遇到一個(gè)小坑——腳本里包含了CREATE DATABASE語句和USE語句有些用戶直接雙擊腳本文件用默認(rèn)工具打開執(zhí)行到指定數(shù)據(jù)庫上下文時(shí)找不到對(duì)象。正確的打開方式是在SSMS里新建查詢把整個(gè)腳本粘貼進(jìn)去先選中第一段CREATE DATABASE執(zhí)行再選中后續(xù)建表語句執(zhí)行。更簡(jiǎn)單的方式是直接在SQLCMD模式下執(zhí)行整個(gè)腳本。我在源碼包里的README文檔里單列了一節(jié)專門說明數(shù)據(jù)庫初始化步驟照著做基本不會(huì)出錯(cuò)。如果你自己開發(fā)過程中需要更輕量的數(shù)據(jù)庫可以換SQLite版本代碼System.Data.SQLite或用Microsoft.Data.Sqlite連接字符串改成Data SourceAssetDB.db就能跑源碼里替換DAL層的數(shù)據(jù)庫訪問實(shí)現(xiàn)即可。但注意SQLite對(duì)并發(fā)寫入支持不如SQL Server多用戶同時(shí)操作時(shí)可能遇到數(shù)據(jù)庫鎖死的報(bào)錯(cuò)。4.4 DataGridView綁定數(shù)據(jù)后行號(hào)不更新這個(gè)屬于WinForms的經(jīng)典問題不算報(bào)錯(cuò)但很影響體驗(yàn)。DataGridView在數(shù)據(jù)源變動(dòng)后如果你在RowPostPaint事件里繪制行號(hào)數(shù)據(jù)刷新后行號(hào)不會(huì)自動(dòng)變化。解決辦法是每次數(shù)據(jù)源變化后調(diào)用一次Refresh()或者在RowPostPaint事件里強(qiáng)制讓DataGridView重繪private void dgvAssets_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { var grid sender as DataGridView; string rowIndex (e.RowIndex 1).ToString(); var centerFormat new StringFormat { Alignment StringAlignment.Center, LineAlignment StringAlignment.Center }; e.Graphics.DrawString(rowIndex, grid.Font, SystemBrushes.ControlDarkDark, new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, grid.RowHeadersWidth, e.RowBounds.Height), centerFormat); }4.5 局域網(wǎng)多人同時(shí)操作時(shí)數(shù)據(jù)庫連接池耗盡這個(gè)問題是用戶量上來之后才暴露的。最開始十個(gè)人以內(nèi)都正常后來行政、財(cái)務(wù)、IT加起來三四十人在線系統(tǒng)突然變得卡頓后臺(tái)日志顯示數(shù)據(jù)庫連接超時(shí)。排查發(fā)現(xiàn)每執(zhí)行一條SQL都打開一個(gè)新連接雖然用了using釋放但在高并發(fā)場(chǎng)景下頻繁創(chuàng)建和銷毀連接的開銷很大。解決思路是使用連接池。ADO.NET自帶的連接池默認(rèn)是開啟的關(guān)鍵是要保證連接字符串一致這樣連接才能復(fù)用。如果連接字符串里每次動(dòng)態(tài)傳數(shù)據(jù)庫密碼連接池就失效了。另一個(gè)優(yōu)化是把查詢分頁。資產(chǎn)臺(tái)賬表我加了一個(gè)分頁查詢方法用ROW_NUMBER()或者OFFSET-FETCH每次只取當(dāng)前頁的數(shù)據(jù)。數(shù)據(jù)量幾萬條時(shí)這個(gè)差異非常明顯不翻頁的grid加載速度能差出好幾秒。5. 擴(kuò)展方向與實(shí)際經(jīng)驗(yàn)沉淀5.1 從課程設(shè)計(jì)到真實(shí)系統(tǒng)差距在哪里項(xiàng)目做完之后我一直在想這套系統(tǒng)如果直接拿到小公司里去跑還缺什么總結(jié)下來有三點(diǎn)。第一是資產(chǎn)二維碼標(biāo)簽。真實(shí)場(chǎng)景里資產(chǎn)盤點(diǎn)靠掃碼槍或手機(jī)掃碼效率遠(yuǎn)高于肉眼核對(duì)資產(chǎn)編號(hào)。這套系統(tǒng)的數(shù)據(jù)庫已經(jīng)預(yù)留了AssetCode字段后續(xù)可以在打印報(bào)表時(shí)用Zebra或TSC標(biāo)簽打印機(jī)輸出二維碼配合手持PDA或者手機(jī)小程序做掃碼盤點(diǎn)。第二是審批流的靈活性?,F(xiàn)在領(lǐng)用審批是固定一級(jí)審批但真實(shí)公司可能根據(jù)資產(chǎn)金額分級(jí)審批比如超過5000元的資產(chǎn)需要部門經(jīng)理財(cái)務(wù)總監(jiān)雙審批。這需要額外設(shè)計(jì)一張審批規(guī)則配置表把審批節(jié)點(diǎn)、審批人、審批條件都配置化。第三是資產(chǎn)的圖片和附件管理。很多資產(chǎn)需要保存購買合同、發(fā)票掃描件、保修卡照片現(xiàn)在的方案只是在Assets表里加一個(gè)附件路徑字段把文件存到服務(wù)器某個(gè)目錄下。更好的方案是用文件服務(wù)器或者對(duì)象存儲(chǔ)統(tǒng)一管理數(shù)據(jù)庫里只存文件ID。5.2 源碼交付時(shí)文檔和注釋的重要性最后聊聊源碼交付這件事。我見過太多課程設(shè)計(jì)或者畢業(yè)設(shè)計(jì)代碼功能都實(shí)現(xiàn)了但文檔一塌糊涂。接手源碼的人光是要搞明白數(shù)據(jù)庫表之間怎么關(guān)聯(lián)、哪些存儲(chǔ)過程被哪個(gè)窗體調(diào)用就得花幾個(gè)小時(shí)。這套系統(tǒng)的源碼里我做了幾件事所有公共方法都寫了XML注釋數(shù)據(jù)庫腳本開頭有表關(guān)系說明項(xiàng)目根目錄放了README文件說明部署步驟和賬號(hào)。剛開始寫代碼的時(shí)候覺得這些花時(shí)間但到了后期維護(hù)尤其是在兩臺(tái)開發(fā)機(jī)上切換修改注釋的回報(bào)率遠(yuǎn)超你的付出。評(píng)論區(qū)里如果需要我可以把核心模塊的單表結(jié)構(gòu)DDL語句和幾個(gè)典型存儲(chǔ)過程的實(shí)現(xiàn)細(xì)節(jié)貼出來。做資產(chǎn)管理系統(tǒng)本身不復(fù)雜但想做得讓用戶覺得好用、讓維護(hù)的人覺得省心很多細(xì)節(jié)是需要耐心打磨的。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久激情| 色婷成人狠干| 99精品视频免费观看| 婷婷九月色| 99婷婷精品推荐在线视频| 久久婷婷六月综合综合色| 婷婷五月天久久久| 91色干| 开心五月深爱五月| 婷色五月| 毛v一区二区视频| www.激情| 色色射| 丁香婷婷成人在线播放| 天天摸天天爽| 大香蕉啪啪网| 色婷婷操逼| 超碰97在线观看免费| 天天搡日日搡aaaaⅩ| 六月丁香射婷婷欧美色图片| 五月六月播婷婷| 99热插| 国产日韩欧美| 九九色婷婷| 五月天伊人网| 人。妻久久| 丁香五月另类小说在线阅读| 一夜福利不卡| 99这里只有免费的小视频在线观看| 婷色视频| 97人妻碰碰碰碰碰久久久久久| 色噜噜狠狠色综无码久久合欧美| 国产超碰在线| 99re在线观看| 久热超碰| 亚洲激情综合| 99色综合网| 欧美精产国品一二三区| 色婷婷色九月| 色5月婷婷色| 九九色插| 亚洲另类AV| 黄色三级毛片中字| 欧美三9久九观看| 久久久久久久97| 五月婷婷69| www.日韩艹| 99精品视频在线免费观看| 婷婷伊人| 热久久思思热思思| 操逼在线视频| 天天视频亚洲| 无码99| 深爱婷婷网| 丁香婷婷视频一区二区| 丁香六月欧美| 五月婷婷色情| 五月丁香综合激情| 亚洲中文字幕在线观看| 色色色色色日韩午夜激情| 亚洲操b| 白天AV月月| 五月婷婷综合热| 婷婷五月激情网站| 婷婷六月天精品| 99r这里只有精品哦| 丁香六月婷婷综合激情欧美 | 日韩久久成人| 91高潮喷水久久久久久久久| 婷婷九月狠狠色| 中文字幕成| 久久久性爱网| 99热成人精品| 天天色色天天| 色婷网| 五月丁香婷婷爱| 99精品在线观看| 在线视频激情网站| 激情五月天开心网丁香无码| 六月丁香成人网| 五月激情网综合| 日本熟女内射| 91婷婷丁香五月| 久大香蕉| 99精品视频在线观看| 少妇搡BBBB搡BBB搡毛茸茸| 无码少妇高潮喷水A片免费 | 天天色99| av 一区三区四区| 激情五月综合免费| 欧美丁香婷婷五月| 另类小说五月天| www.色五月| 人人插操| 色色色婷婷五月天| 婷婷五月天99| 色播婷婷五月天| 欧美日韩一区二区三区四区| 婷婷在线中文字幕| 91肏| 色五月六月婷婷| 色欧洲| 婷色五月| 色射7856五月天激情四射| www.99精品在线| 色狠狠狠干| 色综合久久88色综合天天人守婷| 荷兰av一级| 伊人久久婷婷| 婷婷激情四射五月天| 99在线视频播放| 这里有精品99| 久久综合影院 | 免费视频WWW在线观看网站| 色五月婷婷久久| www.日日夜夜.com| 亚洲人妻电影| 九九免费在线视频| 97啪啪| 91碰碰碰久久久久| 激情涩涩网| 五月天久久综合婷婷丁香| www.jiujiujiu| 免费无码毛片一区二区A片| 日韩 mm 不卡| 色五月视频无码播放| 激情综合激情综合| 狠狠操狠狠色| 亚洲精品va| 婷婷色五月色| 天天色中文字幕女优AV| 亚洲夜五月| 五月婷婷之综合激情| 亚洲操逼网| 亚洲色99综合天堂| 婷婷五月丁香综合激情小说| 九九综合| 色五月婷婷1| 色婷婷五月丁香在线观看| 99九九热视频| 五月激情基地| CHINESE熟女老女人HD视频| 婷婷伊人綜合| 丁香五月六月欧美| 丰满女老板BD高清A片| 婷婷狠狠18禁久久| 五月丁香婷婷免费视频| 色婷婷综合久久| 狠狠色婷婷| 99热精品中文字幕| 久久久久久久91| YJLZZJLZZ亚洲乱熟无码| 99热在线这里只有精品| 国产乱人偷精品人妻A片| 丁香五月人妻| 色五婷婷开心缴| 欧美性色A片免费免费观看的 | 思思热高清在线观看| 无码免费人妻A片AAA毛片西瓜| 六月丁香狠狠爱| 五月婷深深爱激情网| 97人人看| 婷婷激情综合| 五月天丁香网| 色色色999| 九九热99熟女| 亚洲旡码| 99色免费观看全部| 噜噜狠狠| 五月激情天| 九月丁香婷婷| 99性视频| 另类五月婷婷| 亚洲午夜视频| 亚洲五月天天| 四川BBB搡BBB爽爽视频| 天天日,夜夜爽| 久/久精品99看9| 欧美性爱一区| 五月丁香成年黄色| 综合99久久| 91免费看片| 午夜天天精品视频| 色色色视频免费无码| 99热.com| 午夜理论片最新午夜理论剧| www.五月天| 天天橾夜夜爽| 久热综合| 久久婷婷色| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 日本久久九| 五月丁婷婷| 成人片黄网站色大片免费毛片| 玖玖伦理电影| 色色999三级片| 大鸡巴伊人网| 丁J香六月首页| 丁香六月婷婷开心婷婷网| 中文字幕在线观看视频www| 青柠影视免费高清电视剧| 饮料下药迷倒漂亮女同事强干| 97涩婷婷| 九九热99热| 亚洲六月色婷婷| 丁香视频| 看片视频在线免费日产在线看| 久热久色| 欧美色图天堂网| 婷婷之六月丁香| 国产精品涩涩涩视频网站| 婷婷五月综合色中文字幕| 亚洲精品字幕在线观看| 天天日天天爱天天噪| 久久精品天| www.日韩国产| 五月婷婷网久久| 人人操婷婷| 九月色婷婷综合| 婷婷五月丁香六月| 亚洲网在线观看| 色XX综合网| 丁香五月激情网| 六月丁香啪啪| 99热这里只有免费精品| 久久激情综合| 精品热九九| 九九性爱网| 五月婷婷色播视频| 91九九热| 天天日天天色| 99视频久久| 丁香五月天激情| 草草夜夜操| av人人干| 99久久成人| 男人天堂 久久| 久久综合五月天| 天天AV导航网| 二级黄色毛片| 天天日天天插| 天天日天天舔| 婷婷性爱无码视频| 91碰碰碰| 丁香六月激情毛片| 操B视频在线播放| 99色在线视频| 五月激情婷婷女| 日良久久| 超色欲天天| 乱精品一区字幕二区| 99热6精品| 99国产小视频2013| 五月丁香欧美综合| 久久婷鲁| 亚洲午夜在线视频| 九九色热| 99久久久免费| 五月婷婷丁香五月天| 色情五月天视频网| 99热精品观看| 九九视频在线观看视频在线播放69| 97超碰人人操| 久草热视频在线观看| www色色com| 九九99视频精品| 五月婷婷激情| 中文字幕成人| www.五月婷婷.com| 成人五月天视频播放| 五月婷婷色播视频| 99在线精品视频免费| 亚洲色图在线视频| cao视频,现在观看| 色九九中文字幕| 五月天婷婷影院| 色香久久| 丁香婷婷五月综合| 五月婷激情| 九九热这里只有精品一| 狠狠操天天操天天操| 依人大香蕉| 狼友超碰| 人人摸人人操人人爽| 五月综合激情图片| 密视AV综合在线| A短视频免费在线观看| 天天爽天天操| 夜夜操夜夜操| 激情五月天视频| 99精品国产热久久91色欲| 亚洲热热视频| 婷婷五月天国产在线播放| 婷婷激情丁五月| 婷婷五月天在线观看av| 婷婷五月情色| 99成人精品| 国产五月丁香在线| 99热在这里只有免费精品| 激情五月婷婷| 天天日天天狠狠操| 青青草蜜臀| 国产精品五月丁香| 国产美女最新VA在线免费观看| 久久五月天婷婷视频| 91超碰人人操| xxxx五月激情| 五月丁综合在线观看| site:esunnet.com| 天天做综合网色综合| 五月激情综合婷婷| 五月中旬婷婷丁香六| 久久久全国免费视频| 九九热免费视频| 夜夜撸日日操| 国产偷人爽久久久久久老妇APP| 色99色| 五月婷婷六月情| 99re8这里只有精品99re8热视频| 婷婷色基地| 亚洲亚洲永久无码777777| 丁香五月在线看| 五月丁香中文字幕| 久草视频一,二三四| 这里只有精品久久| 久久综合爱| 久热欧美| 强辱丰满人妻HD中文字幕| 国产人妻人伦精品一区二区| 九九综合影音先锋| 97婷婷在线视频| 4399在线观看免费高清黄色视频| 激情五月天久久丁香| 9 1超碰九色| 影音先锋色色色资源色资源色| VA婷婷| 丁香五月天天日| 五月天狠狠干| 五月天激情婷婷| 99热99色| 超碰九热| 综合久| 婷婷五月久久| 香蕉久久六月| 小视频aaa久久久| 色五月综合网| 91碰超| 小视频久久久aaa| 精品一二三区久久AAA片| 综合色色五月| 91要啪| 开心五月激情| 五月婷婷开心五月| 色五月婷婷基地| 91无码色色| 婷婷婷久久| 亚洲成人AV在线观看| 色欲婷婷夜夜| 99热在线观看免费精品| 五月综合久久| 97精品自拍视频| 777.色色| 亚洲天堂啪啪| 色情婷婷久久五月天| 亚洲婷婷91丁香| 国产精品五月丁香| 日本精品99| 成人草榴视频| 国产日产成人亚洲欧美国产VA| 亚洲激情视频网| 日本五月天网站| 狠狠色婷婷777| 色婷婷av综合网| 丁香婷婷色| 婷婷激情欧美| 久久五月丁香| 五月婷婷丁香六月| 射久久丁香五月| 99ri在线| WWW久| 色青青视频| 五月天丁香久久| 精品香蕉99久久久久网站| 欧美日韩成人免费在线| 五月婷婷丁香在线| ..真实国产乱子伦对白在线_欧| 婷婷九色| 激情婷婷五月基地| 一点色成人网| 深爱婷婷基地| 亚洲天堂啪啪| 婷婷五月无码| 天天爽天天摸人妻综合网| 五月丁香狠狠爱| 国产激情在线| 成人丁香| 五月丁香婷婷啪啪网| 五月丁香六月婷精品视频| 色丁香五月| 色色五月婷婷网| 婷婷五月天成人五月天| 九色视频91疯狂| 五月天婷婷色综合| 一级二级香港秋霞欧美欧美秋霞| 少妇伦子伦精品无吗| 五月丁香六月婷婷综合在线| 久久激情五月| 六月丁香大香蕉| 综合色五月| 涩丁香| 天天天天天操| 国产精品久久久久久久久久| 亚洲色婷婷婷婷人人爽| 思思热在线观看| 激情四射网| 日日噜噜夜夜狠狠久久丁香五月| 色色色色色色色色色色色色色色,网站| 九九免费精品在线视频| 亚洲成av人影院| 99久久黄色顶级视频| 深爱激情五月婷婷| 99久久免费性爱视频`| 色婷婷亚洲| 4399在线日本A片| 伊人玖玖精品| 色五月琪琪| 婷婷97碰碰| www.com亚洲网站在线免费| 五月天亭亭俺也| 99视频综合网| 五月丁香色婷婷| 综合网网欲色| www.精品99| 久婷婷五月天影院| 成人午夜无码视频| 丁香激惜男女| 婷婷五月激情四射手| 精品免费99| 婷婷色狠狠| 激情五月,婷婷五月,丁香五月| BlACKEDRAW视频一区二区| 99免费视频网| 91色逼| 91久久久久久久久久久| 九九精品片一| 丁香婷婷五月天成人| 亚洲色情网站| 人人操人人操919999| 91精品无码| www色色色com| 久久久99精品免费观看| 人人摸人人搞| 五月婷婷五月天| 国产 码在线成人网站| 五月丁香婷婷激情| 精品动漫 无码av| 毛片新网地| 婷婷丁香69精华| 久久久天堂国产精品女人| 丁香五月天视频在线播放| 人人草碰| 狠狠做婷婷| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 精品视频网| 91精品综合久久久久久五月丁香| 久久婷丁香五月| 激情五月天色播| 久久婷婷五月综合色播| 99ri视频在线播放| 婷婷综合在线| 精品乱码久久久久| 激情婷婷内射| 久xxxx| 激情小说婷婷| 激情五月天无人视频在线| 成人综合AV| 五月天激情综合网| 九艹在线| www夜夜操wwwcon| 97人妻碰碰碰久久| 成人美女网| 丁香五月成人婷婷| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 激情五月综合网| 99热这里只有精品免费观看| 激情美女五月天| 91美女啪啪| 深爱激情丁香| 99在线精品视频| 成人狠狠成人狠狠成人狠狠成人狠狠| 婷婷涩五月| 久久婷婷艹| 五月天综合网| 综合99综合久久久久久久| 五月婷婷无码专区| 婷婷综合久久| 色女人久久| 九色99视频| 五月开心网| 狠狠穞A片一區二區三區| 五月激情综合激情五月| 久热人妻| 99色精品| 69精品无码一区二区三区| 免费视频WWW在线观看网站| 人人操人人干AV| www.色五月天.com| 婷久看人爽| 五月天婷婷久久| 黄色五月婷| 日B日潘金莲BB| 九九热在线视频| 久9免费视频| 丁香六月天堂| 男女久久婷婷五月天| 色综合色综合婷婷热| 婷婷色在线视频| 九九久久久综合| 久热婷婷综合| 五月婷婷影院| 丁香五月电影| 97操碰| 99热97| 久久婷婷网| 日韩aaaaa| 五月婷婷综合久久| 五月天色网站| 五月天激情婷婷丁香| 色婷婷成人在线| 色婷婷色五月另类综合| 色丁香五月婷婷婷| 538在线| 久久五月天激情婷婷| 99精品在线观看| 五月天激情图片| 久久久久亚洲AV无码网影音先锋| 爆乳熟女一区二区三区爆乳| 九九视屏| 九热...av| 99狠狠色| 婷婷五月丁香综合亚洲| 婷婷激情小说网| 久草婷婷| 婷婷五月天va| 色综合色色色色色| 日本va欧美va欧美va| 婷婷日日夜夜| 国产精品色色| 在线观看的av| 狠狠色色| 亚洲综合五月天婷婷丁香| 99热只有| 亚洲视频一区| 婷婷五月综合社区在线| 亚洲av无码影院| 五月丁香久久色| 日本久久精品18| 五月丁香激情综合啪啪| 无码啪啪| 五月婷婷丁香伦理网| 五月婷婷伊人久久| 强伦轩人妻一区二区电影| 欧美黄色韩日网| 日熟女| 99操视频| 天堂无码人妻精品AV一区| 刘玥av在线| 五月婷婷久久网| 99久久五月天| 五月天激情综合在线| 亚洲 日韩色色| 丁香六月婷婷色XXXX| 中文字幕婷婷五月天在线观看| 五月天久久91| 六月综合婷婷开心伊人| 国产精产国品一二三在观看| 日韩三级视频一区二区| 亚洲婷婷丁香| 婷婷五月免费观看| 五月婷婷之综合激情| 超碰色综合| 五月婷婷性爱| 色约约视频一区二区三区四区五区| 99丁香五月婷婷在线| 久久六月天| 伊人久久婷婷五月天激情四射| 五月婷婷说| 99久久99九九九99九他书对| 9视频在线成人网站| 91精产品自偷自偷综合| 五月天婷婷网站| 狠狠狠狠狠干| 亚洲日韩一页精品发布| 97久人人| 丁香婷婷色五月合集| 婷婷五月电影| www.99.色| 婷婷色网站| 我要看激情五月天| 狠狠狠狠狠| 丁香六月av| 色色啊| AA久久| 青草久久五月婷伊人| 婷婷网五月天| 五月天色小说| 色色丁香| 久久婷婷综合国产| 丰滿爆乳一区二区三区| 久久久人妻久久久| 伊人在线视频| 97色射| 成人五月天婷婷| 天天久| 国产精品激情AV久久久青桔| 成人片在线播放| 婷婷五月无码| 欧类av怡春院| 五月丁香久人妻中文| 99久视频| 欧美,日韩成人在线| 欧美va亚洲va| 日韩精品999| 日本玖玖在线| 丁香六月高清视频| 色婷婷丁香五月| 丁香五月先锋| 婷婷丁香五月激情| 在线综合亚洲欧美65| 久久99热这里只有精品23| 香蕉操亚洲| 大香婷婷| 色色哒五月婷婷六月丁香| 国产亚洲成AV人片在线观黄桃| 五月丁香另类图片| 丁香五月欧美色综合| 99精品久久久久久久久| 六月丁香五月激情婷婷| 欧美成人精品三区综合A片| 二色av| 成人片在线免费看| 人妻久久久久久久久久| 成人 在线观看国产| 五月花综合网| 色99在线| 日本本土色网第一区| 色婷婷视频| 色999;丁香五月| 99热青青草| 成人网在线视频| 五月婷婷九| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 日本不卡高字幕在线2019| 婷婷激情中文综合| 丁香五月性爱| 人人草成人视频| 婷婷五月色播放| 97极品在线| 五月天婷婷人妻| 在线中文AV| 久久综合网免费视频| 九九精品热| 怡红院 久久| 97干在线免费| 午夜69成人做爰视频| 最新午夜理论片| 色婷婷丁香五月| 亚洲第精品| 色婷婷基地| 狠狠色激情在线| 久草热8精品视频在线观看| 国产va在线视频| 99ER热精品视频| 久久AV电影| 啪啪五月婷婷| 婷婷激情视频| 久久人妻少妇嫩草AV| 97操碰人人| 五月丁香激情片| 五月天社区| 丁香伊人激情| 五月天婷婷网站| 色色日本| 4399在线日本A片| 91啪级电影| 区区久久妻| 五月丁香网站| 影音先锋 婷婷| 丁香色情五月综合激情| 婷婷丁香五月婷婷| 中文字幕成人| 亚洲综合激情五月| 99亚洲视频| 国产又爽又猛又粗的视频A片| 婷婷色色播五月天| 熟女啪啪视频| 久久99综合| 中文字幕乱轮| 免费黄色片子| 日本44久久在线| 91人操人人人操人| 天天色天天干天天插| 激情婷婷黄色五月| 另类天堂| 丁香六月天之亚州热女| 99九色视频在线观看| 超碰人妻公开在线| 美女激情综合| 丁香五月婷婷成人网| 亚洲天99| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 色综合久久88色综合天天| 五月婷婷丁香| 五月天成人在线播放丁香| www.婷婷亚洲基地| 操91综合网| 五月婷婷六月丁香| 激情五月六月婷婷| 99在线免费视| 久久婷网| 日本三级99人妇网站| 婷婷久久久| 啪到高潮激情丁香五月| 五月丁香婷婷福利| 99热欧美精品| 99超碰欧美| 思思精品视频| 99热免费| 99热777| 色情五月天视频网| www.99精品视频| 影音先锋日本三级资源| 日日夜夜天天综合| 丁香五月激情网| 亚洲综合在线丁香五月| 99色精品视频| 色综合久久88色综合天天99| 97sese婷婷| 年轻的妺妺伦理HD中文| 激情婷婷| 五月婷婷熟女| 久久这里有精品| 日日肏天天操| 婷婷五月激情丁香激情| 久久98| 婷婷激情六月综合| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 丁香婷婷综合色五月激情国产基地| 涩五月婷婷| 91日本在线| 五月婷婷五月天| 深爱五月最新网址| 啪啪啪五月天| 婷婷在线操| 思思99热热热99| 丁香婷婷五月激情| 男女免费视频999| 伊人影院久久网| 久久se 综合网| 精品人妻伦九区久久AAA片| 色色色免费视频| 六月婷婷激情图片| 日韩高清成人| 91丨九色丨熟女丰满| 婷婷性色| 91午夜激情| 亚洲六月色| 99re思思热久久| 美女美女美女三级色天天天天天| 呦呦AV| 激情丰满熟妇五月| 97婷婷丁香五月天激情图片| 99热6这里只有精品6| 色色色色热热| 色五月婷婷天天干| 丁香五月天天日| 五月婷伊人| 婷婷五月天色网久| 国产片色| 丁香六月激情网C0W| 五月天深爱激情网| 久久人妻伊人| www.五月天婷婷| 天堂五月婷婷| 99re免费精品视频| www夜夜| 婷婷五月天色| 欧美激情综合五月色丁香| 亚洲爆乳无码精品AAA片蜜桃| 少妇被下春药玩弄A片| 日韩AV免费电影在线播放| 欧美成人猛片AAAAAAA| 蜜臀久久99精品久久久久久酒店| 青青草伊人婷婷| 日日夜夜九九| 五月婷婷综合性爱噜噜| 日本婷久久| 99er这里只有精品| 爱的综合网| 日本va欧美va欧美va| 五月天婷婷社区| 日韩成人AV在线| 日日干夜夜干| 亚洲免费综合一区| 色五月婷婷青娱乐| 99操视频| 色色欧美。| 2021日韩无码| 五月婷婷色色色| 99热热九九| 国产精品成人av在线观看春天| 91婷婷五月天嫩女| 五月丁香婷婷色色| 风流少妇A片一区二区蜜桃| 秋霞九九无码| 人妻激情综合| 丁香久久AV| 激情五月天开心总和网| 91人人爽狠狠狠| 五月丁香六月婷| 99综合入口| 久久婷婷色色| 97婷婷丁香五月天激情图片| 色爱亚洲| 亚洲综合色网| 丁香婷婷浪潮AV久久综合| 日韩99视频| 99色啊| 日韩aaa| 日本色五月| 成人性生活免费观看。| 欧美色久| 激情都市五月天| 激情五月色婷婷| 国产精品久久久久久久久久| 十区AV| 丁香六月激情综合网| 99热都是精品| 五月婷婷六月丁香| 丁香久月| 五五月五月| 影音先锋一区| 秋霞av吧| 九色婷婷| 五月婷婷综合久久| 色色色综合| 九九www| 亚洲丁香五月深爱五月| 99色视频| 天天干人人奸97| 久久精品99| 另类小说激情五月天| 思思热在线观看| 99热99天堂| 五月丁香六月婷婷免费视频| 亚洲成人AV在线播放| 97人妻超级碰碰碰碰碰| 天天射美女| 久久久久久久久久久久63| 丁香婷婷人妻| 99热这里| 日韩三级高清无码| 777.色色| 婷婷久月| 亭亭五月基地在线| 9999热这里只有精品| 天天玩夜夜操| 激情五月天的婷婷| 激情五月少妇| 成人免费120分钟啪啪| 99色中文| 色五月综合在线| 九九婷婷五月天| 亚洲亚洲激情| 日日天天干| 夜夜爱影院| 五月天成人在线播放丁香| 99热综合| 99色综合网| 97香蕉碰碰人妻国产欧美| 91日本在线免费| 亚洲小说欧美激情| 开心激情站| 天搞天天天天天| 婷婷五月激情欧美| 大香蕉Av在线| 丁香婷婷月| 欧美激情 日韩无码 婷婷 五月天| 激情校园 亚洲| 久热这里| site:901-07.com| 天天爽人人综合免费7799| 成人毛片在线免费观看| 真实亲子乱子伦高清在线观看| 九九色婷婷五月天| 六月五月久久丁香| 年轻的妺妺伦理HD中文| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 91丨九色丨老熟女激情| 五月丁香五月天现场视频| 粉嫩AV久久一区二区三区| 久久五月天婷婷视频| 天天色综网| 99视频自拍| AV九九| 99re在线观看| 色播五月| 婷香五月网在线| 九九成人视频| 色婷婷六月性| 久久五月婷| 色综合播放| 成熟妇人A片免费看网站| 91免费在线视频6| 国产精品18久久久| 99精品7| 1级欧美日韩| 激情五婷网| 色色婷婷婷丁香五月天| 日本丁香五月| 色色色区| 丁香五月天堂网| 五月婷婷色播视频| 99热综合| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 97干在线| 欧美一级色| 伊人日日干| 色综合婷婷99| www五月| 色99热| 人人摸人人| 亚洲Av入口| 久久激情四射| 极品另类| 激情视频网址| 国产FREESEXVIDEOS性中国| 五月丁香激情综合六月涩涩爱| 中日韩美欧成人一区二区精品在线| 色情五月天婷婷| 九九超碰人人| 在线中文av| 狠狠 婷婷| 五月天激情亚洲| 九九99热久久精品66中文字幕| 中文字幕av在线| 欧美激情综合色综合啪啪五月| 婷婷娱乐丁香综合网| 综合www色| 玖玖在线视频| 狠狠色狠狠鲁| 99资源在线| 99热6这里只有精品| 五月丁香六月色情网欧美| 日韩无码亚欧无码| 婷婷射综合| 激情欧美婷五月| 综合 蜜月 婷婷| 五月丁香黄色视频| 亚洲狠狠操| 六月婷婷九月丁香| 超碰99在线观看| 天天爽天天日天天舔| 久久综合五月天| 91 影音先锋| 4438激情网| 天天做天天双| 五月丁香综合影院| 激情婷婷五月天| 色99网| 激情四射五月天偷偷看婷婷| av不卡网站| 日韩一级片| 九九精品在线网| 婷婷五月丁香久久| 久久久全国免费视频| 99热99色| 亚洲欧美国产高清vA在线播放| 五月色综合| 二区成人视频| 婷婷五月天AV| 色综合九九| 欧美性爱中文字幕| 99精品偷自拍| 国产成人av在线播放| 深爱激情av| 丁香五月激情六月欧亚激情综合导航| 亚州第一黄网| 色婷婷丁香| 亚洲婷婷五月| 久久九精品| 狠狠色色| 久久影视婷婷五月| 九九九九精品精| 性爱综合网| 婷婷性爱五月天| 婷婷开心青青草| 香蕉综合在线| 亚洲国产网站| 中文字幕网伦射乱中文| 97天堂| 婷婷五月色| 六月色国内综合| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网 | 久久婷婷五月草视频在线播放| 久久免费丁香| 五月天婷婷色综合| 曰韩少妇内射免费播放| 操操国产| www.五月天婷婷| 成人性爱精品视频| 开心 五月 综合| 色色五月天网站| 日本在线wwww| 婷婷丁香六月天| 99精品在线| 六月丁香激情网| 91人操人人人操人| 五月丁香淫淫婷婷婷| 夜夜夜叫天天天做| 欧洲亚洲免费视频9| 欧美内射AA| 色偷偷色婷婷| 日本黄色精品| 黄色成人AV在线| 久久5 9视频免费观看| 国产精品18久久久| 精品人妻一区| 九九色综合| 激情丁香社区| 激情AV在线| 天天日天天操心| 深爱五月激情| 婷婷五月激情在线视频| 青青草婷婷综合五月| 婷婷五月天激情在线观看| www.粉嫩av.com| 激情av| 91热久久| 大香蕉婷婷色| av在线观看免费| 九九色影视| 九九热黄色| 亚洲超碰在线| 欧美婷婷六月丁香综合色| 丁香六月啪| 久久综合中文| 狠狠大香婷婷爱| 99热乎| 午夜理论片最新午夜理论剧| 伊人大香五月天| 2050人人操免费工开爱| 99久久黄色顶级视频| 色五月婷婷成人视频| 亚洲avjiujiur91| 国产夫妻操逼内射视频| 天天草婷婷五月| 手机激情网| 伊人网色婷婷五月天| 日本操逼九九九九58日本操逼| 丁香五月六月激情久久| 亚洲视频伍月婷婷| 天天摸天天透天天舔| 色五月偷偷| 9l视频自拍9l九色成人| 亚洲激情综合| 色婷婷小说| 日本女色人人| 伦乱人妻| 国产三级片91| 久久久人妻久久久| 色噜噜,噜噜色| 丁香色情五月综合网站| 亚洲成人在线五月天| 天天日天天色| 国产亚洲色婷婷久久99精品91| www.99热| 成人AV在线中文版| 婷婷五月乱交换| 欧美三级黄色片久久| 开心五月婷婷激情| 日本在线免费中文com.| 天天爽夜夜爽天天爽夜夜爽| 深爱五月激情五月| 操久久网| 99热这里有精品| 婷婷天天五月天| 成人中文字幕在线| 天天噜天天插| 狠狠草综合网| 中文字幕丰满人妻无码专区| 日日操天天操| 九色99视频| 久99在线视频| www.精品99| 日日.c| 久久99久久99久久99人受| 香蕉久久国产AV一区二区| 久久久噜噜噜www成人| 人妻22p| 五月丁花色综合网| 色偷偷五月天| 99操视频| 狠狠 久久| 99色热| 天天色天天爱天天爽| 久碰婷婷视频| 最近中文字幕大全免费版在线 | 亚洲一区二区 成人网站戴套| 思思热久久艹| 五月丁香六月婷婷亚洲| 日韩久热| 婷婷在线网| 色碰碰| 久久婷婷欧美| av久热| 热久久999| 9久久精品| 天天摸人人摸| 亚洲精品大片| 久热99久热| 亚洲人人96@| 五月婷婷激情网| 成人无码髙潮喷水A片| 中文字幕97超级碰| 天天开心AV色综合婷婷五月天| 激情九色| 夜色五月天| 久久精彩综合视频| 五月情婷婷| 色综合色| 五月婷婷色播| 亚洲va欧美va国产综合久久久| 成人视频一区| 色婷婷另类| 都市激情五月婷婷综合| 99免费热视频在线| 九九综合九色欧美狠狠| 26UUU一区二区| 婷婷五月精品中文字幕| 丁香六月婷婷色XXXX| 久久婷婷视频| 丁香五月天资源网| 国产婷伊人| 久青青久| www,色婷婷| 五月激情婷婷四射| 丁香五月婷婷色五月| 成人 在线 日韩| 婷五月天| 久久这里99| 亚洲综合色网| 色婷婷久久| 香蕉人在线香蕉人在线 | 婷婷五月性感| 五月婷人妻| 成功精品影院| 999热在线视频| 成人网址在线观看| 日本操B片| 激情 婷婷 丁香五月天| www.色婷婷.com| 91碰碰| 影音先锋色婷婷| 91丨九色丨老农村| 九九视频这里有精品| 超碰日韩成人| 九九热在视频| 狠狠色成人影片| 91九色视频| 久久婷婷婷| 久久婷婷五月综合啪| 久久久久思思热| 色婷婷激情Av久久久| 五月丁香六月婷婷中文版| 激情五月综合亚洲另类| 色婷婷综合视频| 婷婷激情性爱| www99在线观看视频| 欧美五月婷婷综合| 久久38视频| 伊人丁香花综合影院| 91欧美| 激情 五月 婷婷 丁香| 99久久6| 五月开心婷婷网| 黄网在线免费观看| 超碰人人超碰| 91 九色 熟女| 久久综合99| 天天色视频| 丁香综合婷婷开心激情网| 久久99久久久久久| 一本久道综合色婷婷五月| 色婷婷狠狠爱| av九九| 91色久| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 五月天丁香六月综合| 丝袜大香蕉| 噜噜噜噜婷婷五月天| 99热色精品| 婷婷久久婷婷色五月| 开心五月深爱五月| 婷婷色系婷色| 91无码一区人妻A片蜜| 天天热夜夜操| 色婷婷AV在线观看| 26uuu成人网| 桃色激情五月天| 九九热AV| 人妻性爱| 亚洲偷| 九九激情视频| 婷婷狠狠97| 婷婷五月香蕉| 丁香五月六月久久综合| 97碰碰碰免费公开在线视频| 热久久国产视频| 婷婷五月激情综合啪啪| 五月婷激情影院| 色五月网址| 色色热| 射久久丁香五月| 婷婷 丁香 久久| 大香蕉伊人久久| 婷婷丁香五月天综合网| 一本婷婷丁香久久 | 91热久| 97碰久久| 欧美日韩大黄| 婷婷丁香五月在线观看91| 丁香婷婷情色五月天| 久久停停超碰| 国产乱妇无乱码大黄AA片| 亚洲色无码| 久久婷婷五月天蜜桃| 久久五月天婷婷| 丁香五月开心婷婷| 五月丁香六月综合基地| 九九综合久久| 婷婷综合色播网| 日本色天堂| 伊人在线视频| 日韩aaaaa| 99免费热在线精品| 成人免费超碰| 欧美婷婷丁香五月社区| 天天干狠狠操| 一起草aV| 婷婷久久五月天| 五月色丁香视频精品| 丁香六月婷婷综合激情欧美| 日本欧美成人片AAAA| 激情婷婷五月社区| 狠狠舔| 玖玖九九9999在线观看视频精品| 午夜激情婷婷| 激情网开心网| 欧美日韩成人免费在线| 精品亚洲国产成AV人片传媒| 五月丁香六月综合激情| 99热精品少| 五月天婷婷色色网| 成人做爰黄A片免费看直播室男男| 天天色粽合合合合合合合|