免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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| av性爱网站| 秋霞A V毛片| 亚洲精品久久久久久久久久吃药 | 97ai婷婷| 国产肥白大熟妇BBBB视频| 99热免| 丁香九月激情| 婷婷99狠狠躁天天躁中文| 久久99热这里只频精品6学生| 99热精国产这里只有精品| 六月大香蕉| 免费看欧美成人A片无码| 亚洲成人网站在线播放| 色五月婷婷很很操| www.ppypp| 在线婷婷| 狠狠色噜噜狠狠狠狠综合| 国产女18毛片多18精品| 久久九九激情五月天 | 九月丁香婷婷综合| 人人色婷婷| 丁香五月狠狠综合欧美| 婷婷五月天成人动漫 | 激情五月视频| 亚洲婷婷五月天在线激情综合网| 色五月天丁香婷婷| 五月天婷婷伊人| 日韩在线观看网址| 国产欧美精品AAAAAA片| 99九九精品| 在线观看av网站| 亚洲精品五月| 婷婷五月天亚洲综合| 国产成人av在线播放| 五月 婷 久| 国产伦亲子伦亲子视频观看| 色综合色综合网| 欧美日韩成人在线网站| 九九自拍网| 色色色色色色色色网站| 久久久这里有精品| 国产精品爽爽久久久久久| 天天xxxxxx天天日| 五月丁香亚洲综合| 草综合14| 丁香五月六月综合激情| 庭庭久久内射| 99精彩视频| 99亚洲视频| 5月婷婷6月六月丁香| 色色欧美色色| 色5月丁香婷婷| 女高怪谈在线观看| 五月婷婷导航| 久热9| 91超碰在线播放| 久99久热| 日本va欧美va国产激情| 日本少妇裸体做爰高潮片 | 色五月婷婷久久| 婷婷五亚洲| 只有精品视频在线观看| 欧洲日韩一区二区三区| 九九精品在线观看视频6| 色婷婷五月综合在线| 婷婷五六月丁香| 2050人人操免费工开爱| 激情五月四色| 五月婷婷丁香大陆免费| 天天操婷婷| 夜夜干 夜夜操| 婷婷激情四射| http://www.lingjunshare.com/| 丁香五月aV| 久久人妻情侣| 久久五月天色婷婷| 国产偷人爽久久久久久老妇APP| 丁香五月花| 日韩精品一区二区三区,四区,五区视频| 国外亚洲成AV人片在线观看| 美女91一起草| 欧美大奶熟女噜噜噜噜| 亚洲精品性色| 99啪| 99色热综合| 亚洲欧洲一二| 六月丁香啪| 玖久精品视频9| 久久机热这里只有精品| 国产亚洲在线| 狠狠色婷婷丁香五月| www.yw色| 婷婷娱乐丁香综合网| 六月丁AV| 欧美韩国日本| 人人97碰| 五月天综合激情网| 99热这里有精品| 婷婷五月丁香99| 97色天堂| 蜜臀嫩草| 99在线精品免费视频| 亚州婷婷五月激情综合| 99惹精品视频| 亚洲成人网站在线观看| 色五月色图| 亚洲婷婷丁香五月在线| 99riAv1国产在线观看| 五月激情天| 色婷婷无吗| 色亭亭丁香五月天| 国产六月婷婷| 婷婷开心激情| 五月久久婷婷天堂视频| 婷婷 月 丁香| 五月丁香狠狠爱| 五月天另类小说| 五月婷婷五月天| 日韩成人精品中文字幕| 日韩操啪| 日木狠狠干| 精品,99| www.91在线观看| 色婷婷av在线观看| 久久久99视频| 五月天综合视频| 成片免费观看视频大全| 五月天桃色深爱网| a片在线免费观看一区| 99热在线里有精品| 99久在线精品99re8热| 婷婷九月丁香天堂丁香天堂| 99视频在线精品免费观看2| 五月天成人免费视频| 免费观看高清无码| 六月丁香激情网| 办公室少妇激情呻吟A片在线观看| 六月婷色| 玖玖爱综合网| 婷婷五月香蕉| 久久激情五月婷婷| 久久这里都是精品免费| 五月天综合色| 另类色视频| 色婷婷免费视频| 天天久久九九| 五月婷婷中文字幕| 午夜爱爱网站| 久9热| 另类激情五月| 中文av网站| 色五月激情| 夜夜骑天天操| 五月天婷婷爱| 99性爱视频| 丰满人妻一区三区三区| 91精品久久久久久综合五月天| 一区中文字幕电影| 日日爽日日爽| 亚洲有码在线视频| 色色色色色色色色色色色色色97| 91精品又长又大又粗又爽又猛| 激情五月色综合国产精品| www.五月天| 91vip在线观看| 天天日夜夜曹| 夜夜躁婷婷AV| jiqingliuyuetian| 99男人天堂| 國語久久婷| 五月丁香色婷婷色| 激情综合五月| 丁香五月综合在线视频| 91碰在线| 97精品人人A片免费看| 五月亭亭激情综合| 久久久久婷| 天天日日夜夜| 南京搡BBBB搡BBBB| 超碰在线网站| 能看的av| 另类五月激情| 99视频自拍| 久久五月天婷婷| 久久这里在精品视频| 双性美人被调教到喷水A片| 情婷婷五月天在线| 99热999| 91碰超| 婷婷丁香视频在线观看免费| 欧美三级大片AA在线看| 亚洲热久久| 天天噪夜夜爽| 99九九玖玖| 伊人色综合网| 六月丁丁香| 色停停香蕉视频| 91在线日| 国产婷婷婷| 久青草影院| 99久久网站| 欧美美女视频| 婷婷五月激情图片| 久久视频这里99| 9l视频自拍9l视频自拍九色学生| 免费无码毛片一区二区A片| 天天干天天射综合网| 大地资源色婷婷视频在线| 性无码专区无码| 亚洲综合网激情小说| 熟女少妇内射日韩亚洲| 五月天成人在线视频网站| 久久婷婷色综合| 五月天开心激情综合网| 久久精品亚洲热| 最新无毒无码AV| 狠狠干综合网| 人妻videos人妻高清| 精品九九婷婷| 久婷婷久草| 色婷婷AAA| 综合色吧| 超PEN精品在线| 开心五月深爱五月| www.五月激情.com| 99在线视频播放| 丁香五月婷婷色| 思思 热 99| 久9热视频| 99色色网| 影音先锋天天日| 色亚洲无码| 操大屄五月天视频| 丁香五月成人社区| 五月婷婷开心网| 五月天婷亚洲天综合网综合| 色月视频| 欧美群妇大交乱婬网| 99热精品超碰| 五月五月婷婷| 国产精品岛国片在线观看免费| 国产欧美精品AAAAAA片| 涩五月婷婷| 色婷婷免费观看| 五月开心深深爱激情综合| 色噜噜狠狠色综合AV兰草影视| 狠狠色丁香久久综合婷婷亚洲成人福利| 在线99热| www.狠狠操| 婷婷五月色情天| 99精品免费视频| 亚洲综合色五月| 婷婷免费成人视频| 99热这里只有精品13| AV九九| 91精品久久久久久久久 | 色五月久久成人婷婷| 国产成人在线精品| 五月天激情黄色小说在线观看| 激情综合色婷婷啪啪六月天| 日韩精品999| 六月丁香色色| 7月婷婷六月丁香| 91操碰| 久久色区| 亚洲VA欧美VA| 开心五月丁香啪| 久久久月丁香| 思思网站| 丁香婷婷伊人| 中文AV网站| 日日夜夜狠狠操| 99re8这里只有精品99re8热视频| 狠狠爱五月婷婷| 婷婷五月天激情网| 丁香六月婷婷| 欧美婷婷色| 丁香五月婷婷综合激情啪啪啪| 大香蕉五月天| 久/久精品99看9| 五月天激情网图片| 99热综合| 激情噜噜噜| 开心五月深爱五月丁香五月激情五月| 久久这里有精品在线观看| 亚洲AV日韩无码| 五月亭亭欧美女人| 日本丁香久在线| 九九超日本| 特黄三级又爽又粗又大| 碰超在线九色| 玖玖综合玖玖| 色婷婷久久综| 操B五月天| 黄色精品五月婷婷| 亚洲成人在线播放| 丁香婷婷五月激情综合| 国产精品噜噜在线视频| 欧美综合激情五月| 丁香五月另类小说| 91九色无码日韩| A1片久久久| 激情视频综合| 99re热在线观看| 98永久精品| 婷婷激情人妻| 亚洲1区| 丁香五月婷久久| 激情五月六月婷婷| 日韩av一区二区在线/日产精品久久久 | 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 性欧美大战久久久久久久83| 日韩精品AV一区二区三区| 五月丁香啪啪啪| 日本三级中国三级99人妇网站| 亚洲超碰在线| 99综合色色色| 182TV大香蕉| 在线天堂9| 99碰超| 亚洲激情亚洲激情| 激情丁香五月激情婷婷| 五月丁香六月玩女人| 久碰婷婷视频| 任你爽视频| 青柠影视免费高清电视剧| 九色99视频| 91一道本| 九九热这里有精品23| 九九热视频精品2| 国产日日夜夜操| 思思久日精品视频| 五月丁香色| 日本九九九九| 国产婷婷五月| 五月丁香五月丁香| 天天久| 国产精品久久..4399| 国产FREESEXVIDEOS性中国| 97人碰人操| 97碰成超视频免费视频| 五月婷婷开心爱| 九九久久视频| 久久精彩视频| 1024AV视频| 99久久玖玖| 狠狠爱综合网| 婷婷五月丁香伊人| 成人午夜无码视频| 免费观看高清无码| 色视频2025| 淫荡综合网| 92久久| 免费无码毛片一区二区A片| 狠干综合| 婷婷色五月久久| 99久免费视频| 天天天久久久| 色爱综合网| 99热碰碰热| 亚洲乱码日产精品BD| 丁香五月婷婷五月| 五月婷六月天| 激情五月影院| 亚洲性视频| 日本精品。999| 99爱视频| 欧美久久久中文字幕| 五月婷婷激情综合| 亚洲中文乱字字幕在线永久| 成人片黄网站色大片免费毛片| 婷婷色五月天色色| 色婷婷五月天堂资源| 欧美 日韩 成人在线| AA片在线观看视频在线播放| 婷婷久久五月| 182TV大香蕉| 成人婷婷色综合| 9999久久久久| 伊人网啪啪| 国产av天天插天天操天天爽| 开心婷婷五月花| 大香蕉精品视频| 91jiuseshunv| av中文网站| 婷婷综合在线| 国产精品成人AV在线| 天天爱天天做天天舔| 大香蕉久热| 激情玖玖综合网| 丁香五月天天哦| 99热99久久| 婷婷伊人綜合中文| 99久久免费精品| 国产精品涩涩涩视频网站| 91色五月| 五月天激情图片| 丁香五月婷婷欧美成人色图| 五月丁香龟婷婷| 97在线观看| 99热国产| av中文在线| 91ncm视频| 欧美日韩精品一区二区三区钱| 极品人妻videosss人妻| 亚洲中文字幕在线观看| 久久午夜理论| 婷婷丁香日韩五月| 99精品无码网站| 国产黄色在线观看| 五月丁香九九九综合| 欧美性色A片免费免费观看的| 蜜乳9188| 九九热在线99| 丁香五月天色| 成人做爰A片免费看视频| 五月丁香网视频| 婷婷激情图片| 亚洲性爱干干| 中文字幕丰满孑伦无码专区| 九九热视频思思| 亚洲亚洲亚洲AAAAAA| 综合色视频| 九九热AV| 九月婷婷久久| 996er热| 人人草公开操| 99爽视频| 1024人妻无码中文字幕| 深爱五月天| 手机旧版看人妻1025| 综合激情在线| 2017狠狠干| 久热91| 久久久人妻人伦| 五月天婷婷丁香| 热久久77777| 亚洲精品字幕| 色激情五月| 婷婷色片| 五月婷婷在线视频| av婷婷丁香 六月| 亚洲日韩一页精品发布| 思思久热6| 狠狠色丁香久久综合婷婷亚洲成人福利 | 99热这里只有精品8| 激情文学 综合 色| 久热婷婷综合| 色婷婷色99国产综合精品| pom538精品视频| 九九热99热| 成人色情五月天婷婷丁香| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 99小视频网站| 97热在线精品| 欧美色色色色色色色色色色影视| 丁香五月花| 五月天婷婷在线播放免费| 超级碰碰碰91| 亚洲成人网站在线| www久久艹| 99丁香五月婷婷在线| 久久婷五月影院| 超碰免费成人网站| 日日操天堂| 色综色网| av婷婷丁香| 在线不卡AC| 超碰成人黄色网| 在线看的免费网站| 国产毛片操B| 亚洲情综合五月天| 中文字幕 中文字幕明步| 五月香婷婷| 天天做天天爱天天高潮| 国产人妻777人伦精品HD| 婷婷99狠狠| 国产又粗又大又爽又黄| 人人爽网| 五月婷av| 五月色婷丁香| Www99热| 琪琪色五月天| 久久狠狠高潮亚洲精品 天天摸夜夜摸夜夜狠狠摸| 色碰碰视频| 五月天激情国产综合婷婷婷就去爱| 亚洲精品99| 婷婷综合另类小说| 色性五月天| 天天激情| 婷婷色导航| 狼人婷婷久久| 超碰碰碰碰| 精品香蕉99久久久久网站| 偷拍丁香九月激情| 色播五月综合网| 九九精品99| 成人羞羞啪啪 全 视频| 色婷婷视频综合| 一丁香五月天月AV| 婷婷久久网| 狠狠色综合五月人人| 久久久久久五月天| 99在线视频资源| 五月色亭丁香| 狠狠狠色激情综合适合| www.色婷婷.com| 亚洲丁香花五月丁香花| 国产精品久久..4399| 婷五月丁香| 天堂草在线看www| 在线看片av| 99ER热精品视频| 亚洲精品另类| 99色这里| 丁香五月偷拍| 亚洲经典三级| 色九网| 婷婷五月伦理| 婷婷丁香五月综合| 久久一级片| 天天插天天狠| 九九热免费视频| 99精品网| 91大神操美女| www.狠狠狠.com| 99热在线看片| 亚洲中文乱字字幕线在永久| 国产做爰视频免费播放| 色香蕉影院| 淫视馆aV二区一区| 97在线视频观看| 99久在线| 色色射| 五月香婷婷| 色五月91| 91蜜桃婷婷狠狠久久综合9色| 免费婷婷| 久久久婷婷婷| 天天综合色| 五月综合久久| 人人爽网| 日本wwww在线| 9视频1在线| 大香蕉狠狠爱主页| 婷婷欧美激情综合| 婷婷丁香97| 一区二区成人电影| 婷婷六月丁香综合| 五月天中文字幕在线婷婷| 欧美丁香六月激情视频| 99亚洲色| 亚洲综合99| 一起肏在线视频| 人妻久久做| 综合大香蕉| 九月色婷婷婷| www夜夜操comwww| caop视频| 夜夜操夜夜姧| 丰满少妇猛烈A片免费看观看| 国产日比| 99人人干| 欧美激情综合色综合啪啪五月| 色婷婷五月综合激情中文字幕| 天天插综合在线| 99久久婷婷| 大香蕉五月天| 91色婷婷综合久久中文字幕二区| 色噜噜狠狠色综合成人99| 人人射人人高潮| 丁香五月成人自拍| 色色a| 婷婷五月天午夜激情影院| 桃色激情网| 六月婷婷AV| 久久九九热视频| 青青色com久久| 激情五月,婷婷五月,丁香五月| 色逼综合网| 五月丁香狠狠| 蜜桃成语时李时珍 免费| 国产在线aaa片一区二区99| 天天视频精品9| 五月婷婷中文字幕| 美女主播野战视步页| 开心五月网| 色吧五月婷婷| 潮汕成人AV片在线| 色婷婷手机在线| 狠狠干在线视频| 色色色热| 国产亚洲精品久久久久久郑州| 九九色黄色| 亚洲视频五区| 久久思思热视频| 成人av在线电影| 超碰九九热| 欧美色色色色色| 五月婷视频久久| 青草视频在线播放| 亚洲五月停停| 99九九在线精品热动漫| 成人做爰A片免费看网站找不到了| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 99网| 五月婷婷色吧!| 激情骚五月| 超碰93在线观看| 无码九九| 色五月播五月| 色五月丁香婷婷久草| 天天色爽| 九九色播五月丁香| 任你爽在线视频| 五月丁香六月婷综合成人综合| 天天精品视频在线观看视频| 丁香婷婷大香蕉| 丁香五月婷婷亚洲另类| 日本九九热| 色九区| 秋霞av不能| 五月天婷婷色播| 99ri国产| 十区AV| 亚洲性爱区无码区| 国产偷人爽久久久久久老妇APP| 成人综合视频在线| 久久激情天堂| 五月丁香欧美在线| 美女亚洲五月丁香| 婷婷丁香午夜综合影视| 99色婷婷视频| 五月婷六月| 五月丁香六月婷婷国产视频| 日本婷婷激情四射中文字幕在线观看| 婷婷丁香视频在线观看免费| 欧美色色色色色色色| 9999热精品| 亚洲小说欧美激情| 国产肥白大熟妇BBBB视频| 亚洲人妻AV| 国产免费一区二区三区三州老师F1F1.CC | 91pornav在线| 天天草天天摸| se婷97| 色婷婷狠狠干| 婷婷五月天久久久| 亚洲夜五月| 婷婷视频网| 日本久久性| 色婷婷五月天| 97碰在线免费观看| 99色| 国产精品99久久久久久久女警| 亚洲综合99| 777久久综合视频| 午夜一区| 特黄三级片| 久久婷婷夜| 婷婷WWW久久| 婷婷五月天VI| 字幕网AV中文字幕| 九九精品热| 国産精品| 超碰超碰在线| 91打屁股视频网站| 韩国97天堂| 久久精品熟女亚洲AV麻豆| 人人操av| 蜜桃成语时李时珍 免费| 色婷婷免费视频| 婷婷五月天电影网| 99只有这里有精品在线视频| 久久99网| 激情网婷婷五月天| 丁香婷五月天开心六月| 激情久久久久久久久久| 五月丁香六月情| 欧美xx激情视频在线观看| 成年人看Va免费视频| 婷婷丁香五月综合激情小说| 深爱五月最新网址| 天天色,天天日,天天做| 久热只有精品| www.久久99热地址发布| 婷婷五月丁香久久| 久婷婷视平| 99re热视频这里只精品5| 人人操操| 久久机热/这里只有精品| 丁香五月色播中文在线播放| 91在线资源| 97五月天| 五月天婷基地| 亚洲成人电影在线免费观看| AV色婷婷| 亚洲色婷婷激情| 99热费观看| 色播五月丁香| 欧洲日韩一区二区三区| 99热无码| 无码人妻电影| 五月天激情国产综合婷婷婷| 五月天丁香婷婷久久九| 97婷婷狠狠久久综合9色| 丁香五月天黄色片| 一本道综合网| www色五月| 美日韩成人| 51精品国自产在线| 99热只有精品在线| 日韩婷婷五月| 久色中文| 色婷婷88| 野战J办公桌椅H| 丁香久久九九99| 99九九精品| 伊人色综合网| 亭亭丁香aV| 中文字幕av久久爽| 97av在线视频| 激情深爱五月天| 五月丁香啪啪激情| 9191avse| 操草草草| 婷婷五月天成人| 亚洲VA口| 26uuu亚洲色| 性欧美日本| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久婷婷六月综合综合| 色综合色色| 日本精品。999| 色五月婷婷综合在线| 香蕉AV777XXX色综合一区| 丁香五月区| 五月综合六月婷婷| 无码地址| 色五月激情综合| 婷婷色色综合| 96丁香六月婷婷蜜桃综合久久| 蜘蛛女侠2003满天星免费观看| 中文人妻主播久久| 久久99婷婷| 大香蕉在线观看9| 少妇人妻人伦A片| 中文字幕在线免费观看视频| 九九久热| 国产精品久久久丁香五月八戒视频| 大香蕉五月天婷婷| 亚洲无aV在线中文字幕| 最近中文字幕在线中文视频| 丁香婷婷基地| 天天爽天天日| 婷婷噜噜| 五月亭亭综合五码| www.99热国产| 丁香五月色网| 99日在线观看视频| 亚洲色图五月丁香五月婷婷| 国产3p露脸普通话对白| 99在线精品视频| 色婷| 操操日韩| 热99一二三| 91男人资源站| 日韩黄色中文字幕| 人妻体体内射精一区二区| 色婷五月天| 久久综合丁香激情五月| 无码人妻电影| 97精品自拍| 九热视频在线精品15| 五月天色区| 婷婷免费视频| 久久久人妻门| 激情综合色| 五月色丁香激情| 99性感视频| 六月丁香五月激情网| 色人五月婷婷| 91精品久久久久| 亚洲天堂爱爱| 综合色播| 久久久妻人人人| 99色在线视频观看| 欧美婷婷| 五月激情丁香六月狠狠干| 男人的天堂999| 丁香五月情色| 无码一区二区三区四区五区| 99久久国产宗和精品1上映| 婷婷五月丁香综合| 大香蕉久操| 五月丁欧美| 婷五月天天| 99热成人精品| 色婷婷在线视频久| 六月丁香深深爱| 久久婷婷五月激情网站| 五月丁香六月婷婷久久久综合| 五月天停停基地| 亚洲色vA| 涩涩涩五月天| 婷婷少妇激情| 色色性爱视频| 亚洲国产精品SUV| 91肏肏肏| 九九综合图片网| 99热新网址| 六月丁香婷婷色狠狠久久| 久色视频首页| 五月丁香基地| 天天日日夜夜爽。| 九九99热| 色爱综合网| 欧美日韩二区在线| 伊人久久大香线蕉综合网站| 成人免费网站免费看| 五月丁香亭亭操逼| 婷婷五月天视| 丁香婷婷色情社区成人小说| 日本欧美国产| 激情小说视频图片| 97爱艹婷婷开心丁香激情综合| 色婷婷精| 婷婷的久久网站| 人色五月天婷婷| www,婷婷| 99精色| 日日艹思思热| 国产日韩欧美性爱| 五月婷婷激情| 婷婷五月成人社区| 五月丁香无码| 丁香五月婷婷精品视频| 开心婷婷中文字幕| 欧美色五月| 午夜亚洲AV日韩无码| 久青草大香蕉| 婷婷五月激情热播| 韩国三级五月天婷婷。| 久久九九网| 淫五月停停| 97热精品| 九九热区一区二区三区| 另类小说五月天| 人妻久久久久久| 夜色.cnm| 五月天激情综合网站| 五月天六月婷| 五月花婷婷| 99ri国产精品| 日本激情ⅩXX免费视频| 橾逼网| 激情色播| 丁香花五月天婷婷成人社区| 日本69日人视频| 婷婷五月天干干| 99精品综合| 亚洲AV另类| 综合色五月天| 91九色国产| 色色综合热| 日本精品。999| 99热最新精品| 在线不卡的视频| 六月婷婷五月丁香| 人人视频人人干人人做| 开心色播色五月婷婷| 伊人丁香六月婷婷| 色色色色综合网| 欧美日韩成人高清在线| 另类国产欧美视频| 五月婷婷爽爽爽| 亚洲AV成人在线| 影音先锋一区| 五月天播播中文字幕| 亚洲VA在线| 欧美成人热| 女人露出p毛视频www网站| 亚洲婷婷基地| 五月婷婷综合影院| 人人操操97| 久久婷婷网址| 综合久久十三| www,婷婷,com| 江苏少妇性BBB搡BBB爽爽爽| 丁香五月天激情| 九月丁香婷婷| 色优久久| 亚洲激情网| 九九五月天| 久婷婷| 色999五月色| 婷婷性爱影院| 五月丁香六月婷| 婷婷性爱网| 久色网址| 色色亚洲五月天| 激情网五月| 99色在线观看视频| 婷婷综合一二三| 欧美色色色色色色| 五月激情婷婷综合| 狠狠高潮精品亚洲1| 可以看的av网站| 婷婷 丁香 精品| 色色激情五月| 99碰碰| 日韩无码成人电影| 五月婷在线| 激情五月天综合网| 日本精品人妻无码77777| 国产XXXX搡XXXXX搡麻豆| 日韩成人中文| 激情婷婷。| 爆乳熟女一区二区三区爆乳| 五月综合丁香婷婷| 黄色99热| 久久精品婷婷| 婷婷五月天777| 久噜久噜| 天天插天天射| 99免费在线视频| 日韩欧美一级大黄网站| 五月天久久久| 色综合视频在线| 天天综合色99| 色欲色天天香综合| 激情综合网之激情五月| 五月丁香激情五月天| 91人妻视频| 欧美激情五月天| 亚洲色在线观看| 人妻久久久| 丁香色婷婷色手机免费在线| 综合激情在线观看| 97碰久久| 我爱va亚洲va52| 人妻久久久久久| 大香蕉综合| 欧美99| 大香蕉伊然在亚洲90| 久久婷婷综合网| 97色五月天| 九九色综合九九色| 99热这里只有精品3| 久久婷婷综合五月| 亚洲人人操| 99热这是里只有精品| 九九色综合视频| 五月丁香香蕉| 国产肥白大熟妇BBBB视频| 99九九这里有免费视频| 久九色| 热久久思思热思思| 久久人妻精品| 四色99久久| www网站在线观看| 色五月婷婷在线| 激情丁香五月激情婷婷| 五月婷婷,狠狠操| 2018国产大陆天天弄| 99偷拍视频在线日本| 色五月激情问网站| 夜色综合网| 成人无码精品1区2区3区免费看| av在线免费网站| 五月激情视频网| 色婷婷88| 五月丁香在线观看国产| 精品九九在线观看视频| 婷婷激情综合| 99网| 日本99热| 五月婷婷丁香六月| 亚洲婷婷性爱| 五月婷六月综合在线观看| 九九在线视频| 亚韩精品视频1区| 99视频在线播放大全| 一区二区三区四区无码| 丁香六月激情| 婷婷亚州综合| 久久只这里有精品| 五月天开心网| 91精品国产综合久久蜜芽解析速度| 热99精品视频观看| 中文字幕在线播放视频| 五月天久草| 俺去也在线www色官网| 五月天偷拍| 内射综合网| 日日撸夜夜操| 大鸡巴伊人网| 丁香五月婷婷乱| 99热在线观看| 久久综合激情五月天| 97视频91| 超碰人人艹| 色色色婷婷五月| 开心婷婷五月天电影院| 天天综合网91| 9精品久久999| 丁香色婷婷| 五月婷婷丁香狠狠撸久久| 五月丁香网站| 丁香深五月婷婷| 五月丁香激情综合| 99爱无码| 欧洲亚洲最新精品| 亚洲免费99| 伊人九热| 开心激情站| 97色久| 五月婷婷69| 九九九成人在线视频| 激情五月综合网| 激情骚五月| 欧美精品999| 99视频35精品视频在线观看| 婷婷综合爱| 呦呦v线| 婷婷丁香六月影视| 五月天婷婷社区久久综合| 色一情一乱一伦一区二区三区| 99碰超| 成人短视频在线免费观看| 九九精品网| 97久久超碰| www久久99| 色五月天在线| 77777亚洲午夜久久| 婷婷五月色色| site:hcxsz888.com| 99久久国产宗和精品1上映| 337p午夜影院| 九 九九九AV| 五月丁香六月婷婷的女人| 国产亚洲99久久精品熟女| 五月婷婷激情综合av| 婷婷月综合| 久久机热/这里只有精品| 伊人大香五月天| 综合久久激情久久| 米奇影视资源777狠狠色婷婷五月天激情网| 亚洲 在线 另类| Www.狠狠| 伊人五月婷婷国产视频| 人人操AV| 五月天成人伊人| 成人美女网| 天天干夜夜谢| 99精品在线| 成人无码免费一区二区中文| 久色婷婷200| 婷婷的99视频网站| 亚洲精品V天堂中文字幕| 日日夜夜爽| 亚洲另类婷婷综合| 午夜天堂啪啪| 五月婷婷精品视频| 五月丁香888| 人妻少妇色综合| 停停五月天激情网| 91视频一起草| 99年操人人爽| 人人干女人| 亚洲激情高潮| 伊人五月天97| 国产人妻777人伦精品HD| 丁香婷婷噜噜| 天天干,天天舔| www超碰com| 激情五月天色色| 五月天婷婷伊人| 97人人做| 99丁香五月| 欧美日韩成人在线| 中文精品久久久久人妻不| 九色视频入口91| 色五月婷婷在线| 久久怕怕视频| 玖玖在线资源视频| 97电影99热| 五婷婷综合网| 九九99久久| 丁香五月六月| 色狠狠图片| 极品嫩草| 中文字幕日产A片在线看| 亚洲AV中文在线| 日日操,天天操| 激情小说五月天社区丁香| 色婷婷激情Av久久久| 婷婷色五月丁香六月欧美啪| 噜噜网免费视频| 丁香狠狠| 91久久综合亚洲鲁鲁五月天| 无码人妻少妇色欲AV一区二区| www.婷婷| 五月丁香天天| 五月婷五月婷伊人伊人五月婷| 五月天丁香综合在线| 亚洲精品久久久无码| 天堂A∨在线| 色性日本| 操国产人妻| 久久九九网| av网址在线| 午夜爱插插| 视频一二区| 久久码久久无清| 综合网网欲色| 六月丁香婷婷综合影院| 夜色热久| 2050人人操免费工开爱 | 天天日日夜夜| 婷婷激情综合| 色丁香五月| 五月天婷婷丁香| 五月丁香av中文| 网色99| 久久xx| 99只有精品| 99亚洲精品| 婷婷丁香宗合888| 国产在线黄色| 91丨九色丨白浆| 久99视频在线观看| www.狠狠| 国产精品色色| 中文字幕在线日亚州9| 大香蕉啪啪网| 国产肥白大熟妇BBBB视频| 色婷婷六月| 激情AV网| 色婷婷亚洲综合av| 99热销国产这里有精品| 五月亭亭欧美女人| 精品牛仔裤超碰| 久久视网36| 日韩色色色99| 91精品电影18T| 玖操97| www.com五月天| 伊人五月天在线| 91丨九色丨熟女|老版| 丁香五月婷久久| 情欲禁地| 99热在线极品极品| 日本色色网站| 五月天无码| 五月婷婷插一插| 亚洲色激情| www.97碰碰com| 天天爽天天干| 精品乱码久久久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 五月丁香婷婷福利| 综合性爱网| 激情五月丁香五月| 99ER热精品视频| 九九婷婷五月天| 五月婷婷色色网址| 日韩成人网址| 五月丁香婷婷激情在线视频| 大陆肏屄视频| 激情综合无码| 麻豆AV一区二区三区| 国产激情一区| 五月激情啪啪啪| 玖玖精品视频99| 久婷久婷| 六月激情综合| 亚洲国产成人AV在线 | 9热视频在线观看| 性一交一乱一交A片久| 97精品综合久久内射| 丁香六月综合激情| 丁香五月综合在线| 久久色五月天| 99视频在线观看地址| 色五月婷婷综合在线| 亚洲中文丁香| 夜夜爽天天爽| 免费看欧美成人A片无码| 五月天激情啪啪| 日本色噜| 国产激情综合五月久久| 国产看真人毛片爱做A片| 激情五月天99色| 在线观看熟女少妇| 天天干天天操天天爽| 天天干天天干天天干| 日本久久精品18| 色五月aV| 亚洲午夜av| 一区二区三区四区牛| 丁香五月图片| 可以看的av| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 狠狠色综合网| 中文在线视频久1| 成人av免费观看| 9精品视频在线| 日本熟女一区二区| 人人操AV| 精品人妻一区二区三区在| 五月婷六月| 五月六月激情| 亚洲激情五月天| 中文AV在线观看| 婷婷色狠狠| 久久97久久99久久综合欧美| 久热99| 激情五月开心五月丁香五月| 日本人妻伦在线中文字幕| 337p大胆噜噜噜噜噜91Av| 日日操夜夜撸| 亚洲五月六月婷婷| 精品婷婷五| 香蕉久久国产AV一区二区| 五月婷婷导航| 五月丁香六月婷婷综合伊人| 色99在线| 国产亚洲色婷婷久久99精品91| 久草大| 天天爽天天爽| 中文网AV| 亚洲日日操| 丁香婷婷五月激情| 日韩av在线免费观看| 五月天婷婷Av| www,五月天激情| 99丁香婷婷综合网| 九九一综合精品| 欧美激情综合色综合啪啪五月| 日韩不卡DvD| PORNY九色9l自拍视频成人| 色色婷婷丁香五月天| 亚洲美女网Va| 在线一起草av| 人草人人| 激情五月婷色| 天天操夜夜橾| 伊综合蕉| 激情五月天伊人av| 婷婷亚州综合| 人妻内射视频| 九九人人看| 五月婷婷色| 九九偷拍网| 色婷婷五月在线| 天天摸色吧天天摸色吧| 这里只有精品1| 五月婷综合性中心| 日本久久视频| 乱岳熟女50岁| 午夜亚洲AV日韩无码|