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
返回資訊列表
久久婷婷色综合| xxx.色婷婷| 亚洲情综合五月天| 色色婷婷丁香| 激情五月婷黄版| 天天做综合| 亚洲影院婷婷色| 超碰在线成人| 另类图片激情五月| 五月天婷婷成人网| 91人人爽久久涩噜噜噜| 国语精品探花| 天天情色综合网| 五月综合亚洲色| 婷综合六月| 91狠狠色丁香婷婷综合久久精品| 色欧洲| 思思热视频在线| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 欧美久久婷婷| 亚州AV超碰人人操| 色色综合色| 乱女乱妇熟女熟妇综合网站| 插插插丁香五月婷婷| 爱狠射| 婷婷大香焦| 色色色色色色网| 午夜爱爱网站| 激情色色| 五月天激情小说网| 天天天天干| 天堂久久精品| 婷婷网五月天| 午夜不卡久久精品无码免费| 爱99干99| 另类国产欧美视频| 婷婷婷久久久| 久操大香蕉| av第一二区| 综久久久| www.91.com黄| 99精品视频免费在线播放| 99热销国产这里有精品| 96丁香六月婷婷蜜桃综合久久| 99久热在线精品99re6热| 大香蕉视频婷婷| 婷婷五月天99综合网站| 九九色区| 九九热这里精品| 六月婷婷深深爱| 亚洲综合色色| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 五月婷精品| 人妻激情综合| 中国丰满熟女A片免费观| 成人无码髙潮喷水A片| AV九九| 国产特级毛片AAAAAAA高清| 亚洲成人在线播放| 色婷婷丁香AV综合| 久草大| 激情五月天久久丁香| 久久er免费视频| 草操网| 激情五月天网页| 久久有码| 婷婷五月电影| 牛色色碰| 人妻激情综合| 色婷婷久久综合丁香五月| 婷婷精品综合| 99在线精品观看99| 五月丁香六月婷婷的女人| 九九99热久久精品66中文字幕| 亚洲乱码w在线观看| 超碰91在线| wWwCom夜操wwW| 久久五月人人摸| 五月开心啪啪| www激情| 极品人妻VIDEOSSS人妻| 色婷婷69| 天天干天天操| 国产精品日本一区二区在线播放| 9久热在线视频精品| 狠狠操综合| 色综合久久88色综合天天人守婷| 丰满人妻一区二区三区| 五月美女婷婷风骚| 99er这里只有精品视频| 99久在线精品99re8热| 色色色色色色色色五月先| 久久小说| 久久只有这里精品免费| 九色91视频| 色情五月婷婷| 大香蕉五月天婷婷| 色婷婷婷婷五月天| 牛牛澡牛牛爽| 免费日韩99| 精品久久人妻| 六月婷婷日| 超碰在线99| 婷婷丁香五月,狠狠综合| 丁香五月欧美激情| 激情亭亭五月| 五月丁香六月婷婷操操操| 人人摸人人| 久久久久久久,99精品视频| 综激情网| 永久免费一区二区三区| caopeng97人人| 色月视频| 嫩BBB搡BBBB榛BBBB| www.com亚洲网站在线免费| 性婷婷| www.色综合.com| 丁香六月婷婷缴情欧美| 先锋资源996| 14色综合婷婷| 伊人色综合久久久| 五月婷婷影院| 久久9热| 色婷婷色婷婷五月| 久久这里只有精品视频15| 婷婷六月丁香在线| 婷婷久久五月天| 激情四射网| 丁香五月婷婷色情综合| 激情碰碰碰| 激情五月网站| 亚洲99热| 婷婷99狠狠躁| 五月婷婷,狠狠操| 五月天激情婷婷久久| 人妻内射一区二区在线视频| 色五月激情五月丁香五月婷婷啪啪综合 | 亚洲无码黄色| 成人免费高清在线播放| 成人中文字幕在线| 91男同| 欧美WW在线网| 无码啪啪| 最新午夜理论片| 99热这里只有精品3| 激情亚洲婷婷| 亚洲第一综合| 五月婷婷影视| 大香蕉丁香| 色五月丁香六月欧美综合| av网站不卡在线| 五月婷婷成人网首页| 人人干人人看| 99精品爱| 91九色国产熟女| 婷婷五月在线视频| 丁香综合婷婷开心激情网| 1024国产| 亚洲五月综合色播| 99色在线视频观看| 91人人爽狠狠狠| 性生活视频98791| 91人人操.COM| 国产五月天激情小说| tingtingcaobi| 色色色色色色97| 嘿嘿视频免费看9| 久久婷婷激情视频| 色区久久| 婷婷五月激情在线| 99性视频| 天天天天天久久久久久| 五月婷中文字幕| 激情五月天综合网| 五月天综合婷婷| 伊人综合婷婷| 成人做爰A片免费看视频| 婷婷五月天激情亚洲小说| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 中文AV网站| 五月天激情无码| 久婷久婷| 色婷婷呢狠禁久禁| 人人摸人人摸| 五月婷婷 激情五月| 婷婷射图| 97成人在线视频| 色婷婷精品视频| 成人在线日韩| 五月99久久| 激情又色又爽又黄的A片| 99在这里有精品| 五月停停999| 开心激情站| 丁香六月五月天| 五月婷婷五月天| 久久人妻熟女一区二区| 人妻综合网| 婷婷五月天在线观看av| 丁香五月日韩| 亚洲欧美国产A片免费观看| 操久久网| 色婷久| 色噜噜,噜噜色| 国产精品视频网| 强伦轩人妻一区二区电影| 亚洲精色| 婷婷激情五月综合在线视频| 人人爽在线视频综合网| 欧美99热| 九月婷婷色色| 欧美激情 日韩无码 婷婷 五月天| 五月天.com| 狠狠做深爱婷婷久久综合一区| 五月天激情播播网| 日日爱678| 日韩AV成人电影| 六月丁香五月天| 亚洲精品大片| 午夜五月天| 天天在线天天综合网色| 婷婷久久综合| 9久久久久久久久久久| 婷婷五月综合社区在线| 色五月婷婷7777| 久久久久人妻网址| 99热超碰| 婷婷丁香色五月| 第五色婷婷| 五月天色婷婷视频| 婷婷五月天另类视频| 97色97干| 翔田千里 50岁 无码| 亚洲天堂九九九| 亚洲xx在线| 777精品久无码人妻蜜桃| 思思99久久| 99热这里只有精品免费| 日本美女五月天| 丁香五月欧美激情| 五月婷婷丁香俺日污视频| 欧洲激情五月天婷婷| 粉嫩av懂色av蜜臀av熟妇| 97偷拍在线视频| 9色资源在线| 日韩丰满少妇无码内射 | 久久综合九色综合97婷婷| 99色色| 亚洲欧美婷婷五月色综合| 色五月天电影| 婷婷激情性爱| 99爱在线视频| 九九热在线精品视频| 丁香五月天综合| 超碰在线人妻| 精品人妻一区二区三区四区不卡在| 色哟哟www| 色碰碰| 五月色丁香| 色综合久久88色综合天天99| 九九热这里只有精品6| 久久色情| 99热这里只有精| 激情操逼婷婷| 9久久久| 99久久97久久欧美综合网| 色综合久久无码| 婷婷色五月天色| 热久69| 欧美日韩国产日本精品四虎网网站物| 99色视频在线观看最新| 婷婷五月天激情综合婷婷五月天激情综合| www.婷婷,com| 亚洲欧美婷婷五月色综合| 人人操AV| 九九九九精品精| 欧美人人草草| 69热在线| 99视频只有这里精品| 亚洲va成人va成人va在线观看| 26UUU欧美激情一区二区| 婷婷性爱| 亚洲无码猫咪| 欧美五月丁香啪啪响视频| 日日鲁鲁夜夜爽爽| 狼人狠狠操| 亚洲热综合| 天天干在线播放| 成人色图情色成人网 www.5b5b5bcom 五月天| 激情熟女网| 大香蕉520| 操嫩逼电影| 欧美婷婷精品激情| 国产精品美女久久久久AV超清| 超碰熟女农村在线69| 月丁香久久久| 日韩抽插操逼| WWW99热| 丁香激情网| 国产亚洲成人综合| 色玖玖导航| 国产精品久久久久久亚洲毛片| 久久这里只有精品视频15| 日韩在线观看亚洲| 久久五月婷天天干| www.99视频| 久久精品天| 色八月婷婷| 婷婷六月丁香五月| 一二线视频 另类| 九九人人精品| 五月婷婷在线播放| 久久五月天激情| 亚洲永久免费| 开心婷婷中文字幕| 一区二区你懂的| 日本本土色网第一区| 97热这里只有精品| 五月久久丁香| 亚洲五月天伊人| 丁香婷婷五月色成人网站| 国产69精品久久久久999小说| 丁香五月先锋| 九九热精品视频在线观看| 国产美女无遮挡裸体毛片A片| 人伦30P| 亚洲另类噜噜| 欧美婷婷色| 六月丁香婷婷视频综合在线观看| 中文字幕,综合,91| 五月婷婷性爱网| 激情婷婷五六月天| 色婷五月天| 久操干| 五月天四色房丁香亭亭| 久久综合九色综合88i| 99re久热只有精品6在线直播| 婷婷色操| WWW99热| 婷婷五月综合体验看| 五月天丁香久久综合| 亚洲sesesese| 网站免费一站二站| 五月丁香网av| 思思热在线观看| 丁香六月激| 一起草Av| 九九视频免费| 中文激情网| 婷婷五月天综合网| 另类激情中文| 婷婷色播色五月五色五月天色妇| 九色PORNY9l原创自拍| 99久久婷婷国产综合精品草原| 日本美女上人| 丁香五月婷婷久久综合激情网| 色激情综合| 超碰91人人操| 九九热最新视频| 亚洲小视频免费播放| 婷婷五月电影院| 色五月成人| 婷婷久久综合久| 色狠狠五月天| 成人草榴视频| 丁香婷婷激情| 久草婷婷| 成人国产网站在线免费看| 森林影视大全,最好看的2019年视频 | 久久99免费视频网站| 亚洲欧州色情在线观看| 丁香五月久久社区| 国产成人av在线播放| 五月丁香91| 在线观看中文字幕| 丁香婷婷色五月天| 99亚洲精美视频在线观看| 9热在线观看| 亚洲AV日韩无码| 五月亭亭六月天| Xx色综合| 婷婷五月天综合AV| 欧美黑人巨大性生话| 玖玖福利视频资源| 99久在线精品99re5热视频| 在线观看的av| 欧美熟女乱又伦| Aα在线免费观看| 九九热99免费视频| 婷婷丁香五另类网站| 91在线人| 六月婷婷色| 午夜无码精品色综合久久| 冬月かえでAV无码播放| 综合久久99| 婷婷丁香在线播放| 99综合视频在线| 8050一级网| 色九月婷婷丁香| 六月亚洲婷婷6月中文字幕| 久9久视频精品| 婷婷综合亚洲| 婷婷五月丁香六月天亚洲综合| 久久99看免费| 2050人人操免费工开爱| 婷婷五月综合激情| 五月丁香六月欧美综合网站| 丁香婷五月天| 91超碰九色| 无码AV大香线蕉伊人| 日日夜夜婷婷| 丁香五月天激情免费在线观看AV777| 天天操无码| 九九精品9| 99精品在这里| 99人妻碰碰碰久久久久视| 婷婷五月综合欧美在线播放| 五月婷在线观看| 色色97丁香婷婷五月天| 亚洲国产精品SUV| 91九色中文| 噜噜噜色噜噜| 欧美日韓成人亚洲精品另类| 五月天丁香网| 激情綜合網址| 天堂网色婷婷| 亚洲中文字幕翔田千里| 成人综合网站| 五月天综合网| 色婷久久| 久久久久久人妻| 开心婷婷五月| 夜夜干夜夜操| 久热网站| 天天成人丁香美女AV| 99婷婷五月天| 色婷婷黄色网络| 99干99| 国内9l视频自拍老熟女九色| 激情五月天天| 久久大香蕉丁香| 免费无码毛片一区二区A片| 久久婷婷综合基地| 日韩在线视频网站| 五月丁香六月色| 欧洲激情精品婷婷| 思思热99热| ss视频xx91| 丁香婷婷六月天| 五月天婷婷一起草| 六月五月久久丁香| 99热这里只有精品50| 久热2025无码| 色婷丁香五月| 成人婷婷五月天| 色五月丁香总合网| 一本道综合网| 深爱激情六月| 婷婷久久五月天| 婷婷五月激情丁香| 美女激情综合| 五月丁香六月婷婷,婷| 丁香五月婷婷狠狠色| 婷婷在线播放av| 99久久精| 伊人干练久| 九九爱看亚洲| 俺也去在线视频 | 伊人碰碰婷婷| 久久九区| 综合在线丁香五月| 在线1青婷| 五月开心久久| 六月婷婷开心| 六月婷婷毛片| 色五月婷婷青娱乐| 色情综合网| 99小精品| 天天摸色吧天天摸色吧| 五月天婷婷免费| www.色99| 秋霞av吧| 久久92| www.粉嫩av.com| 日本在线免费中文com.| 五月亭亭直播| 亭亭玉月丁香| AV操一操| 精热在线综合网| 99热精这里只有精品| www.成人婷婷综合| 在线不卡视频| 91制片厂久久久国产电影| 久久思思99| 人人澡天天色天天做| 丁香五月,激情五月,深爱五月| 五月丁香亚洲婷婷| 激情六月婷婷| 69精品人妻不卡视频| 狠狠干婷婷| 色婷婷色五月综合| 五月丁香 啪啪| 97操碰| 婷婷日本色| 久久ww| 激情网综合| 8区视频在线| 荡乳尤物3HP1V5| 超碰AV成人| 伊人五月天日日夜夜久久久天天| 思思热精品在线观看| 欧美精品999| 曰本久久女| www.色婷婷| 五月丁香六月婷婷综合| 狠狠色综合网| 97碰碰在线看视频免费| 婷婷夜夜操| 色五月婷婷在线| 98热精品| 婷婷开心激情综合五月天| www.婷婷五月天| 五月婷婷爽爽爽| 激情久久综合| 天天爱天天爽| 狠狠 久久| 亚洲avjiujiur91| 一区二区乱码视频| 久热re在线视频| 爱草视频在线| 婷婷丁香六月天| 九月综合| 色婷婷亚洲婷婷在线观看| 国自产拍偷拍精品啪啪一区二区| 久久伊人五月天| 色色色色色网| 丁香婷婷综合喷| www.91有码.com| 色播五月婷婷| 色婷婷久久| 天天拍天天操| 99热超| 26uuu欧美激情另类| 国产毛片精品一区二区色欲黄A片| 久久总和99| 免费在线观看欧美激情xx小视频| 五月丁香狠狠爱婷婷综合| 激情网狠狠干| 无码激情AAAAA片-区区| 99热 在线观看| 五月天色不卡| 久久视屏这里只有久久| 99热这里都是精品| 成人天天爽| 怡红院视频| 日韩成人中文字幕| 日韩视频99| 婷婷久久综合| 狠狠干婷婷| 欧美激情 日韩无码 婷婷 五月天| 丁香五月久久| 中文字幕 码精品视频网站| 亚洲网站999| 久久婷婷东京热| 这里只有精品视频在线| 99久久婷婷五月综合| 亚洲成人中心| 色婷婷丁香五月天| 图片区 小说区 区 亚洲五月 | 超级碰碰碰碰视频| www.91在线观看| 五月天狠狠色| 五月天激情国产综合婷婷| 亭亭玉立国色天香| 国产美女无遮挡裸体毛片A片| 五月婷婷久久激情| 丁香五月激情图片婷婷| 狠狠操狠狠操| 久久精品99| 丁香五月电影| 激情五月www| 婷婷伊人綜合| 九九99精品视频在线观看| 華人性愛AV在線| 最近免费中文字幕大全高清大全1 免费看欧美成人A片无码 | 夜夜 操无码| 九九色热| 狠狠五月婷婷| 免费观看大片视频 丁香婷婷 六月欧美| 婷婷丁香成人五月天| 五月婷亚洲精品AV天堂| 成人婷婷深爱综合网| 99久99久| 91天天操天天干天天射| 91视屏在线观看com.wwwvv| 六六久久黄色| 五月天婷婷av| 99热这里只是精品| 台湾无码A片一区二区| www.夜夜操.com| 人妻操操色| 97欧美在线| 97福利视频| 婷婷五月伦理网站| 国产精品大香蕉| 色色五月婷婷狠狠| 婷婷丁香五月麻豆| 婷婷丁香综合成人| 丁香五月激情婷婷| 嫩草哈哈操| 婷婷丁香18| 天天做天天摸| 久久精品色| 色婷婷狠狠18yy| 色色操| 久热精品视频| 另类五月婷婷| 九九re精品视频在线观看| 亚洲字幕AV一区二区三区四区| 天天爱综合网| 26UUU精品一区二区c〇m| 色99热| 一本婷婷丁香久久 | 大香蕉婷婷久久| 97日韩无套内| 婷婷激情六月| 天天插天天干| 激情五月婷婷丁香综合网| 欧美A级网站| 久久码久久无清| 国产精品久久久爽爽爽麻豆色哟哟| 啪啪色区| 五月天国产婷婷精品视频在线| 五月丁香婷婷在线综合蜜桃| 九九色之九九色88| 丁香五月成人自拍| 五月婷婷电影院| 天天干天天干天天操| 99精品综合视频| 五月天夜夜爱夜夜操| 激情综合五月激情17| 99狠狠操一| 啪啪啪丁香五月| 国产小精品| 成人va在线播放| 操操国产| 婷婷久久五月天丁香| 99热在线这里| 五月天激情无码专区| 先锋资源996| 另类的婷婷| 亚洲另类电影| 成人片在线播放| 色婷婷88| 影视av久久久噜噜噜噜噜三级| 婷婷五月娱乐在线| 5Www色5夜| www.色多多婷| 丁香五月综合狠狠| 91狼友视频在线观看| 牛牛热这里只有jingpin| 精品一二三区久久AAA片| 97色色视频| 这里只有精品免费视频| 这里只有精品1| 婷婷五月激情五月激情| 天天爱天天操| 少妇熟女视频一区二区三区| 99精品网| 精品一二三区久久AAA片| 国产精品久久久久久久久久久久 | 五月丁香久久综合| 色婷婷五月在线| 色欲色香综合网| 99精品亚洲| 五月婷婷婷| 久久久久久久人妻| 亚州在线中文字幕| 丁香五月色色婷| 91在线看免费 九九九九| 九九色院| 永久的网站AAAA | 久婷五月| 99热9| 91中文狠狠综合| 变态另类色图| www.黄色片-久久成人国产精品在线播放-999AV | 激情五月综合免费| 五月婷婷欲色| 免费观看的av| 五月婷激情| 日韩一区二区A片免费观看| 超碰色碰碰| www激情网站| 九月丁香| 五月丁香青草综合啪啪| 99国产精品久久久久久久久久久| 五月婷婷啪啪| 婷婷99综合| 久色88| 性五月激情| 严洲天天插| 久久九精品| 婷婷久久综合| 成年视频免费观看| 操操操www.com| 天天天摸夜夜夜玩| 激情性爱五月天| 免费观看全黄做爰的视频| 伊人久久大香线蕉综合网站| 俺来也综合网精品一区| 久久色这里只有精品| 久久久99视频| 色婷婷六月| 棕合影院色色| 色五月视频,小说| 超碰人人艹| 天天色2017| 在线视频另类| 五月婷婷自拍| 婷色五月天| 综合激情sV| 婷婷深爱五月天在线| 五月丁香综合中文| 五月婷婷久久大片| 另类在线| 色爱综合网| 九九婷婷激情综合网| 久久99精品九九久久久婷婷| 中文字幕婷婷五月天在线观看| 久久亚洲婷婷| 69精品人妻不卡视频| 久久久月丁香| 丁香五月电影| 偷偷操99| 五月六月婷婷| 亚洲精品白浆高清久久久久久| 熟女网站久久| 思思精品视频| 婷婷9月天| 操笔无码| 狠狠干在线| 国产综合婷婷| 婷婷色五月天在线| 狠狠干.com| 这里只有精品99视频| 99色综合网| 激情久久婷婷| 五月天综合图片| 亚洲成av人影院| 五月丁香爱婷婷深深| 爱久综合| 97人妻碰碰碰久久香蕉| 五月亚洲| 丁香五月天亚洲综合| 深爱丁香激情| 香蕉AV777XXX色综合一区| 天天日日人| 99热最新| 色五月天影视| 色五月丁香婷婷| 久操人妻| 高清不卡一区| 成人午夜无码视频| 97人人干| 九九成人精品免费视频| 五月天婷婷在线播放| 久久久久久综合88| 色吧五月婷婷| 国产欧美婷婷| 久久er99热精品一区二区| 亚洲视频在线观看99| 久久曰曰| 国产精品噜噜在线视频| 图片区 小说区 区 亚洲五月 | 艾小青av| 在线中文字幕免费视频| 伊人AV五月婷| 精品导航在线x不卡| 久久R激情| 超碰狠狠操| 色色色色色色色色网站| se99高清无码| 天天爽天天| 再次出发二| 福利视频在线播放| 99re这里只有精品首页| 大大香蕉综合在线| 婷婷情爱五月天6| 97亚洲婷婷| 91中文在线| 99色色网站| 色无婷婷| 狠狠色噜噜狠狠狠888| 色五月婷婷综合在线| 操人91| 久久99热这里只有精品首| 涩五月婷婷| 视色综合| 久久婷婷五月天激情四射| 婷婷五月色| www。五月天。com| 日本99婷婷| 免费亚洲婷婷中文字幕| www.夜夜操.con| 五月停性愛| 999久久久国产精品| 九九碰九九爱97超碰| 亚洲妇女熟BBW| 丁香五月天天高清在线| 肏屄色播伊人97婷婷| 成人午夜无码视频| 婷婷色丁香六月| 婷婷午夜精品久久久| 丰满老熟妇BBBBB搡BBB| www、色色色| 碰碰91| 91精品国产综合久久久不卡电影| 26uuu最新地址| 亚州精品色情无码A片| 婷婷.com| 久99久视频| 天天日天天操天天干| 成人免费高清在线播放| 久青草影院| 成年人丁香五月| 日本精品。999| 久草九九| AAA级久久久精品| 最新av在线观看| 99爱免费视频在线观看| 变态另类9| 开心婷婷五月综合| 狠狠色成人影片| 26uuu欧美日本| 色色色综合视频| 五月婷久久草| 99久久综合狠狠综合久久| 婷久久| 色五月丁香伊人五月| 丁香婷婷综合精品六月初| 六月婷婷AV| 人妻熟女一区二区AV| 天天射美女| 九九热视频精品| 狠狠色综合777| 婷婷色五月丁香六月欧美啪| 狠狠色婷婷丁香五月| 五月婷婷综合激情| www.婷婷五月| 99精品在这里| 丁香婷婷六月激情综合| 99热大全在线观看| 秋霞日本免费毛片A片| 亚洲va久久久噜噜噜久久天堂| 九九热最新| 成人五月天丁香| 五月天亚洲综合网| 99er久久| site:publishdd.com| 激情婷婷内射| 色999亚洲人成色| 9有码中文| 久久婷婷东京热大香樵| 亚韩精品视频1区| 亚洲乱码日产精品BD| 97碰在线视频| 婷婷深爱五月天| 成人短视频在线| 99噜噜| 少妇性按摩无码中文A片| 啪到高潮激情丁香五月| 五月婷婷九| 99热这里只有精品2016| 六月亚洲| 婷婷爱综合| 色五月天天在线观看资源站| 精品乱码视频| 天天色综和网| 99色视| 99这里有精品视频3| 五月香婷婷| 丁香五月婷婷狠狠色| 97综合在线| 久久激情视频| 思思色播| 五月婷婷播| 五月伊人视频在线看| 狠狠另类视频| 影音先锋 91工厂| 久久99久久99精品免视看婷婷| 五月花成人网| 思思精品久久艹| 开心五月深爱激情| 五月天婷婷在线观看| www五月天com| 天天影院色| 97婷婷丁香| 欧美久久婷婷| 97久久久| 九九色婷婷五月天| 五月丁香亭亭A片| 吾爱AV导航| 五月丁香大相交| 99re在线观看| 337p午夜影院| 国产VA亚洲VA96| 色五月成人| 亚洲超碰在线| 激情深爱五月天| 激情五月天婷婷播播久久综合91| 久9热插入| 9热在线观看| 天天综合网、天天综合色 | 久久影视婷婷五月| 99ri在线| 狠狠干狠狠干狠狠干狠狠干| 亚洲另类噜噜| 91碰在线| 国产又黄又爽又色的免费| 蜜桃婷婷丁香综合久久开心亚洲| 丁香伊人五月色婷婷五十路| 一区二区免费看| 色五月涩涩婷婷蜜桃| 99热精地址| 变态另类9| 大战熟女丰满人妻AV| 色开心五月婷婷丁香HD| 丁香五月婷婷啪啪啪| 五月婷免费视频久久久| 99热这里只有精品66| 99re思思热久久| 97日本在线播放| 亚洲成人在线综合| 99在线视频免费| xx人人xx| 伊人色综合网| 久久超级碰视频| 久久成人性爱| 九九色热| 亚洲精品白浆高清久久久久久| 婷婷激情四射五月天| 99re思思| 色色色综合色| 99久久国产宗和精品1上映| 伊人大香蕉综合在线| 另类的婷婷| 操骚货在线| 成人午夜天| 五月天婷婷免费| 伊人色欲五月天| 色99网| 亚洲 成人 电影av在线观看| 丁香五月婷婷色| 日日爱激情| 国产亚洲精品久久久久久郑州| 丁香五月激情综合婷综| 午夜不卡成人一区二区| 综合婷婷久久| 狠狠狠狠青草| 婷婷五月天亚洲色| www狠狠| 亚洲欧洲一二| 五六月丁香激情视频| 五月婷色色| 成人在线观看一区| 婷婷五月天首页| 99re久久| www.久久久.com| 五月激情综合美女久久| 激情六月婷婷| 超碰激情网| 色屌丝中文字幕| ..真实国产乱子伦毛片 | 日本久久99| 97色啪| 色综合激情| 在线看片h站| 丁香婷婷免费| 夜夜干天天操| 欧洲不卡视频| 久久五月丁香| Y11111111111少妇电影院| 很很干五月天| .精品久久久麻豆国产精品| 久久久97| 九九久久99精品免费观看www| 大香蕉娱乐| 色五月丁香伊人五月| 色五月综合激情网| 青青草深爱激情网| 五月天色五月| 久久99最新| 九九热免费视频| 精品乱码视频| 久久只有18视频| 人妻AV在线| 思思re99视频在线观看| 色丁香五月婷婷| 亚洲99综合| 色欲av伊人久久大香线蕉影院| 亚洲碰碰碰| 丁香五月AV| 97人人操| 97人人超| 久久538| 熟女激情网| 99热66| 亚洲综合网激情五月天| 99网| www.色五月天.com| 国产激情一区| 日本五月婷婷| 99热欧美精品| 久久精品99久久久久久| 97精品欧美91久久久久久久| 97在线精品| 色频玖玖五月天| 国产精品99久久久久久久女警| 丁香婷婷人妻综合网| www。久久久久一b。Cc| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 少妇人妻偷人精品无码视频新浪| 婷婷丁香基地在线| a免费在线| 五月婷婷五月丁香| 第五婷婷伊人丁香色| 超碰碰碰碰| 精品久久人妻热| 91夫妻视频| 亚洲综合色色| 五月婷婷色影院| 99ri视频| 亚洲国产色色| 五月天婷婷免费| 丁香六月婷婷综合| 新激情五月天色播| 国产44页| 欧美色色色色色| sewuyuejiqingwang| 玖玖热99| 日韩视频99| 天天干天天干天天干天天干天天| 亚洲欧美国产A片免费观看| 欧美婷婷日本| 五月夜丁香| 伊人综合婷婷| 五月丁香综合| 婷婷噜噜| 97色干| 久久九九思思| 性一交一乱一交A片久久四色| A一级操| 91操在线| 91色婷婷综合久久中文字幕二区| 五月丁香青草综合啪啪| 99在线视频资源| 大战熟女丰满人妻AV| 五月婷婷丁香婷婷| 深情六月婷婷综合久久| 国产在线视频1234| 六月色色| 五月天成人在线视频网站| 色色网站在线免费观看视频| 日韩啪图| 搡BBBB搡BBB搡18| 亚洲国产99| 成人小说 五月天 婷婷| 性色av大香综合| 熟女人妻视频| AV在线观看网站| 思思久热| 激情小说五月天社区丁香 | 美英法精品无码免费视频| 91尤物九色在线| 国产精品电| 五月色影院| 婷婷五月天天天| 先锋男人99资源| 五月丁香亭亭操逼| 九九综合网| 亚洲精品字幕在线观看| www.久久99热地址发布| 男女久久婷婷五月天| 超碰人人艹| 人妻中文字幕精品| 香蕉久久国产AV一区二区| 亚洲不卡| 婷婷激情小说| 综合网五月天123| 第二色AⅤ| 色色操| 五月丁香六月成人| 极品五月天| 亚洲网站观看视频| 欧美精品999| 91九色国产| 操日视频| 五月成人天| 婷婷深爱五月丁香网| 婷婷成人综合免费视频| 九九碰九九爱97超碰| 另类激情码| 丁香五月www| 拍色综合| ..真实国产乱子伦毛片| 激情综合网激情五月天| 色综合色色| 99日本精品视频热| 日韩人妻无码精品| 激情五月婷婷丁香| 欧美激情-区二区三区| 五月婷婷丁香大陆免费| 综合亚洲五月天| 五月丁香A片| 九九久久精品| 色综合九九| 五月丁香精品| 大香蕉久热| AV成人在线播放| 色欲婷婷五月天丁香| 丁香五月成人丝袜| 综合网网欲色| 综合五月丁香六月婷婷| 欧美婷婷精品激| 男人天堂AV在线一区二区| 亚洲成人AV电影网| 欲求不满的人妻| 亚洲AV久久久久久久久久久久久久久久| 无码激情AAAAA片-区区| 少妇水多A片太爽了| 三人荫蒂添的好舒服A片| 少妇人妻偷人精品无码视频新浪 | 熟女色专区| 天天开心婷婷丁香五月| WWW色综合| 色五月天天| 久久成人天| 99视频网| 夜夜撸夜夜骑| 999精品乱码77777| 欧美熟女99| 人人爱人人草| 少妇大叫太大太粗太爽了A片| 欧美三级巜人妻互换| 久久久久久99日本| 亚洲视频在线网| 操人精品| 91色色色| VA国产在线综合网站| 五月丁香亭亭激情操逼网| 激情综合网 激情五月天| 色5月婷婷| 噜噜色婷婷| 色色色在线观看| 五月叮香啪| 精品成人无码A片观看香草视频| 五月丁香婷婷欧美色图视频五月丁香777电影| 人五月天婷婷喷水| 噜噜五月天综合| 婷婷五月综合久久中文字幕| aaa丁香五月天| 婷婷丁香五月六月激情| 日本婷婷色日| 99久久99九九九99九他书对| 亚洲爆乳无码精品AAA片蜜桃| 99re资源在线视频导航| 激情AV中文| 99久久亚洲精品视频| 五月人妻婷婷| 国产精品VA在线| 五月丁香综合激情网| 不卡在线超碰| 天堂久久婷婷| 综合逼五月激情婷婷| 亚洲色爱综合| 五月婷婷之综合激情| 亚洲精品一二三| 精品网站:999WWW| 五月熟妇婷婷久久| 天天激情欧美美女| 丁香六月啪| 九九精品少妇| 激情久久久| 丁香五月六月激情久久| 9久热| 97日本在线播放| 五月丁香六月香香蕉| 思思w99| 精品婷婷| 91久久久久| 久久香蕉网| 99精品小视频| 99∨VTV| 欧美图片丁香五月天| 天天摸夜夜爽天天做| www.久久综合| www,婷婷,com| 少妇高潮一区二区三区99欧美| 99r这里| 久久久18| 久re热视频| 五月天激情无码高清| 天天插天天插天天插天天插 | 久久天堂精品| 五月丁婷婷| 婷婷精品| 一级二级色大片| 日日操人人操| 国产激情综合| 久久精品99久久| 婷婷五月天日本无码| 99热66| 99超级碰免费视频| 天天日夜夜爽| 日韩99无码| 婷婷区日本| 久久久精品色| 夜夜久久综合网| 天天干天天干天天干天天干天| 丁香五月综合| 亚州精品色情无码A片| 在线观看免费狠狠色丁香香综合| 婷婷在线五月综合| 蜜桃婷婷丁香五月天狠狠久久综合| 久久视频婷婷| 99丝袜精品视频网站| 开心激情久久久久久久| 青青草激情网| 97色色婷婷五月天| 亚洲操B| 久久香视频| 天天夜夜六月丁香五月婷婷老师| 久久婷婷视频| 任你爽视频| 超碰人人干| 日本婷久久| 中文字幕丰满人妻无码专区| 18久久| 开心深爱激情网| 天天视频精品9| 丁香五月六月欧美| 国产亚洲精品久久久久苍井松 | 久久九九@| 色婷久| 五月婷婷综合在线| 久久码久久无清| 开心婷婷五月天激情网| 精品国婬伦V无码久久久| 亚洲五月天婷婷综合| 五月婷婷爽爽爽| 丁香六月天色婷婷| 91性交在线播放| 五月婷婷熟女| 任你躁XXXXX麻豆精品| 夜夜噜夜夜奇| 一级AV片| 久8色色| 91成人看| 99色视频| 91无码视频| 26uuu亚洲| 女人天堂av| 97啪在线观看视频| 五月天激情电影|