<appSettings>
<add key=”aspnet:MaxHttpCollectionKeys” value=”9999″ />
</appSettings>
- MaxHttpCollectionKeys is an int, so it could have a max value of an integer (int.MaxValue: 2,147,483,647)
- Minimum value is 1
- Default value is 1000
<appSettings>
<add key=”aspnet:MaxHttpCollectionKeys” value=”9999″ />
</appSettings>
翻了一下QQ聊天记录,其实这个问题也是困扰吉日嘎拉的问题,2015年我曾经就此问题跟他交流过。
在更新语句中和条件中有相同的参数问题,造成报错:
曾经我是先判断条件语句,获取到主键ID,然后再根据主键ID为条件进行更新,多了一次数据库读取,折中处理了好几年。
这次再写类似的程序,实在觉得这么搞太费劲,索性花了几个小时,最终的思路就是即便是同名的字段,条件语句的参数自动改名:增加后缀或前缀。
这么一改,条件的参数就自动增加了后缀Where,就跟更新字段的参数不重名了。当然了你也可以自定义自己的后缀或者前缀。
最终时隔2年多,将此更改跟吉日嘎拉再次沟通,也解决了他的困惑,皆大欢喜。
有在用吉日嘎拉底层DotNet.Common数据读写层的朋友,请拿去不谢。
bug所在位置:DotNet.Business\Utilities\BaseManager.GetDataTableByPage.cs的函数
public virtual DataTable GetDataTableByPage(out int recordCount, int pageIndex = 0, int pageSize = 20, string sortExpression = null, string sortDire = null, string tableName = null, string conditional = null, IDbDataParameter[] dbParameters = null, string selectField = null)中。当使用自己定义的查询语句作为tableName传递进来的时候,按照逻辑没有使用存储过程进行分页,但是很明显那个传递的conditional和dbParameters都被用来统计了总记录数,但是以下调用语句并没有传递conditional。
return DbLogic.GetDataTableByPage(DbHelper, recordCount, pageIndex, pageSize, tableName, dbParameters, sortExpression, sortDire);
于是我扩展了那个DotNet.Business\Utilities\Extend\DbLogic.GetDataTableByPage.Extend.cs,增加了函数
public static DataTable GetDataTableByPage(IDbHelper dbHelper, int recordCount, int pageIndex, int pageSize, string sqlQuery, string conditional, IDbDataParameter[] dbParameters, string sortExpression = null, string sortDire = null)
这里的逻辑是,多表查询构造一个viewTable,然后将where查询直接传递到viewTable里面,而不受分页的影响。上个月扩展了此函数,今天正式升级服务器程序的时候,还是出现了问题,于是有了以上函数的完善版本。上个月是将where条件放在了最外面,造成ROW_NUMBER范围内的所有记录都没有指定where条件的记录,造成用户看记录的时候明明有,显示不出来。当然,这个扩展的函数仅仅是扩展了MSSQL的数据库,有类似使用的朋友可以参考。
看图你就懂了,几年过去了,C#技术跟着吉日嘎拉的平台也一步步升级,从最初的asp+access/mssql2000高手,现在也算是C#+MSSQL2008经验丰富了。
一路上有个可以称之为老师的技术好友,是一种幸运!
目前我用的版本是4.0的,也有近2年没更新了,狠了狠心升级一下,没想到真的行动起来,也没那么难!
用了3天时间,将吉日嘎拉的代码升级到了4.2版本,并让原来的DotNet.WebApplication正常运行起来,比料想的顺利。这里简单记录一下升级中的心得。
使用到的工具:
1、BeyondCompare 试用版 – 比较程序文件
2、SQLDelta 14天试用版 – 比较数据库表结构变化(及数据变化)
3、VS2010 – 保证升级后WebApplication好用
4、MSSQL 2008 R2 – 标配数据库
最新代码的亮点:
1、分离出了DotNet.Model
2、分离出来DotNet.IService
3、DotNet.Business新增Redis缓存
4、DotNet.Utilities新增众多BaseSystemInfo参数和底层函数:数据库读写分离等
5、新增DotNet.UserCenter,用于其它程序如WebApp、安卓、苹果端调用
6、用户登录日志表完善、强大
7、数据库访问增加跟踪及底层文本日志
8、增加DotNet.MVC项目,BS端的用户及权限管理(还未研究)
相关截图:
1、数据库UserCenter更新
2、项目及解决方案截图
注意事项:
1、SqlDelta生成部署的代码后,还需要手动更新老记录中一些字段的值
UPDATE [UserCenterV40].[dbo].[BaseUser] SET IsAdministrator=1,UserName='Administrator',NickName='Administrator' WHERE UserName='Admin' UPDATE BaseModule SET AuthorizedDays=0 UPDATE BaseUserLogOn SET OpenIdTimeout = GETDATE() UPDATE BaseUserContact SET MobileVerificationDate = GETDATE()
2、DotNet.WebApplication中有很多登录及读取权限的函数需要更新BaseSystemInfo.SystemCode
本文是升级记录的第1篇,后继会继续记录研究DotNet.MVC项目后的心得,敬请期待。
后记:请大家不要问我要源码,如需购买请直接联系吉日嘎拉,他的博客园的主页地址:http://www.cnblogs.com/jirigala/