国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

通用權(quán)限管理系統(tǒng)記錄登錄日志中的一個(gè)問(wèn)題

2019-11-17 02:46:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

通用權(quán)限管理系統(tǒng)記錄登錄日志中的一個(gè)問(wèn)題

最近,在使用通用權(quán)限管理系統(tǒng)開(kāi)發(fā)一個(gè)項(xiàng)目,數(shù)據(jù)庫(kù)是MSSQL,登錄時(shí)出現(xiàn)一個(gè)錯(cuò)誤,發(fā)現(xiàn)是記錄登錄日志時(shí)出現(xiàn)的錯(cuò)誤。

由于每次登錄,都會(huì)記錄登錄日志,就是在記錄日志時(shí)出現(xiàn)了錯(cuò)誤。

先把錯(cuò)誤截圖

可以看出與記錄登錄日志的表BaseLoginLog的ID有關(guān)系,打開(kāi)該表

發(fā)現(xiàn)該表的ID是nvarchar(50)類型,查詢一下該表的數(shù)據(jù),截圖如下

可看到,ID實(shí)際存儲(chǔ)的是GUID類型數(shù)據(jù),然后我在調(diào)試底層代碼,找到三個(gè)地方:

 1         /// <summary> 2         /// 記錄登錄日志 3         /// </summary> 4         /// <param name="systemCode">系統(tǒng)編碼</param> 5         /// <param name="userId">用戶ID</param> 6         /// <param name="userName">登錄用戶名</param> 7         /// <param name="Oracle)23             {24                 tableName += DateTime.Now.ToString("yyyyMM");25             }26             BaseLoginLogManager loginLogManager = new BaseLoginLogManager(tableName);27             return loginLogManager.Add(entity, true, false);28         }

 1         /// <summary> 2         /// 添加, 這里可以人工干預(yù),提高程序的性能 3         /// </summary> 4         /// <param name="entity">實(shí)體</param> 5         /// <param name="identity">自增量方式,表主鍵是否采用自增的策略</param> 6         /// <param name="returnId">返回主鍵,不返回程序允許速度會(huì)快,主要是為了主細(xì)表批量插入數(shù)據(jù)優(yōu)化用的</param> 7         /// <returns>主鍵</returns> 8         public string Add(BaseLoginLogEntity entity, bool identity = false, bool returnId = false) 9         {10             this.Identity = identity;11             this.ReturnId = returnId;12             return this.AddObject(entity);13         }

 1         /// <summary> 2         /// 添加登錄日志  多數(shù)據(jù)庫(kù)支持 3         /// </summary> 4         /// <param name="entity">登錄日志實(shí)體</param> 5         public string AddObject(BaseLoginLogEntity entity) 6         { 7             string key = string.Empty; 8             if (!string.IsNullOrWhiteSpace(entity.Id)) 9             {10                 key = entity.Id.ToString();11             }12             SQLBuilder sqlBuilder = new SQLBuilder(DbHelper, this.Identity, this.ReturnId);13             sqlBuilder.BeginInsert(this.CurrentTableName, this.PRimaryKey);14             if (!this.Identity) 15             {16                 // 這里已經(jīng)是指定了主鍵了,所以不需要返回主鍵了17                 sqlBuilder.ReturnId = false;18                 sqlBuilder.SetValue(this.PrimaryKey, entity.Id);19             }20             else21             {22                 if (!this.ReturnId && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.DB2))23                 {24                     if (DbHelper.CurrentDbType == CurrentDbType.Oracle)25                     {26                         sqlBuilder.SetFormula(this.PrimaryKey, "SEQ_" + this.CurrentTableName.ToUpper() + ".NEXTVAL ");27                     }28                     if (DbHelper.CurrentDbType == CurrentDbType.DB2)29                     {30                         sqlBuilder.SetFormula(this.PrimaryKey, "NEXT VALUE FOR SEQ_" + this.CurrentTableName.ToUpper());31                     }32                 }33                 else34                 {35                     if (this.Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.DB2))36                     {37                         BaseSequenceManager sequenceManager = new BaseSequenceManager(DbHelper);38                         entity.Id = sequenceManager.Increment(this.CurrentTableName);39                         sqlBuilder.SetValue(this.PrimaryKey, entity.Id);40                     }41                 }42             }43             this.SetObject(sqlBuilder, entity);44             sqlBuilder.SetDBNow(BaseLoginLogEntity.FieldCreateOn);45             if (this.Identity && (DbHelper.CurrentDbType == CurrentDbType.SqlServer || DbHelper.CurrentDbType == CurrentDbType.access))46             {47                 key = sqlBuilder.EndInsert().ToString();48             }49             else50             {51                 sqlBuilder.EndInsert();52             }53             if (this.Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.DB2))54             {55                 return entity.Id.ToString();56             }57             return key;58         }

從代碼中可以看出,并沒(méi)有對(duì)ID進(jìn)行賦值的地方,本來(lái)想將底層代碼改一下,將生成一個(gè)GUID后作為ID值加入進(jìn)去,后來(lái)考慮到這么做不是很好,

考慮到可以直接改一下數(shù)據(jù)庫(kù)中的字段類型,將原來(lái)的nvarchar(50)類型改為uniqueidentifier類型,并設(shè)置了默認(rèn)值(newid())。

如下圖:

再次運(yùn)行項(xiàng)目,錯(cuò)誤不在出現(xiàn)了。

大家在使用通用權(quán)限管理系統(tǒng)開(kāi)發(fā)項(xiàng)目中,如果遇到一些問(wèn)題,可加入“通用權(quán)限管理系統(tǒng)”QQ交流群:371168832,一起交流、共同提高。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辛集市| 黄浦区| 芦山县| 南乐县| 尼勒克县| 栾川县| 资中县| 沙坪坝区| 东源县| 泸州市| 古丈县| 宁波市| 尉犁县| 六盘水市| 盱眙县| 大姚县| 江北区| 福州市| 吉隆县| 新宾| 义乌市| 竹山县| 蒲江县| 德保县| 廉江市| 监利县| 大石桥市| 景德镇市| 随州市| 上虞市| 神池县| 疏勒县| 长春市| 南雄市| 无极县| 南昌市| 洪江市| 香格里拉县| 颍上县| 鹰潭市| 左权县|