崔文远 Troy Cui 老崔先生的上海生活、技术博客

js自动绑定焦点到指定textbox,

近期开发Web版的微型仓库管理的小系统,系统的特点就是针对单品条码的管理,也就是所有进出货等都是需要扫描一个唯一的条码来进行的。那么就遇到打开网页之后,自动锁定光标到条码输入的输入框,条码枪扫描以后,还需要自动清除内容并再次锁定光标到输入框。其实这就是js开发中焦点的处理,但是要实现这个功能真的没那么简单,并非用.Focus那么简单的,你会发现不管用C#来进行后来的焦点定位 - this.txtSerialNumber.Focus();,还是前台的js焦点定位都不行。

问了N个高手,搜索了N个网站,在高手的QQ群里问了多次,都没有很好地答案,最后在这里找到了解决办法:《[URL=http://wangye.org/blog/archives/150/]JavaScript让登录或搜索文本框自动获得焦点[/URL]》,再次感谢扬州的王晔。

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 127

C#验证Email是否真实存在,并非格式验证的思路

C#中验证邮件地址是否合法的方法有很多,正则表达式就挺好。但是要验证邮件地址是否真实存在,这个就有点复杂了。我参考了一下几篇文章及思路,弄了一个Web程序(写了个类)可以很方便的验证。不过有一点问题就是真实性的准确率方面,需要依赖运行程序的服务器IP地址,因为很多邮件服务上都有一个IP地址发信的黑名单。

有需要的朋友,可以加我QQ购买源码,或者提供Email清单,我来帮你验证。

[URL=http://www.jb51.net/article/17215.htm]C# 邮件地址是否合法的验证[/URL]
[URL=http://blog.sina.com.cn/s/blog_4cc1e6d201009208.html]C#验证Email是否真正存在[/URL]
[URL=http://blog.sina.com.cn/s/blog_4ff16d9201000crl.html]邮件服务器返回的错误码大全 ,from RFC[/URL]

购买源码一口价:100元
支付宝转账,QQ、飞信或手机短信联系,邮箱发送代码。
为啥要付费购买:不用苦逼的去加班了,省下来宝贵的时间健健身、陪陪家人、孩子
QQ:17185490
手机:13818699609
支付宝账号:troy@cuiwenyuan.com

Tags: 干货

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 151

361篮球鞋

上次[URL=http://www.cuiwenyuan.com/shanghai/post/my-basketball-shoes-bought-from-decathlon.html]迪卡侬买的篮球鞋[/URL]被穿的开胶,右脚大脚趾左侧鞋帮开了个口。本打算再去迪卡侬买的,这不周日下午就得穿,索性京东上买了[URL=http://item.jd.com/1068281512.html]双361的马布里代言款[/URL],上一双穿了1年半,希望这双也能穿个1年半。



Tags:

发布: cuiwenyuan 分类: 技术管理与生活 评论: 0 浏览: 104

这个项目要多久开发完成?

 对于标题所述的问题,很多从事IT软件开发的人员会被经常问到,而我就几乎每周都会被问到。巧合的事今天读到一篇文章《How long would this project take?》的中文翻译,索性直接转过来,借由抒发一下心中的感慨。

More...

Tags:

发布: cuiwenyuan 分类: 五音五色 评论: 0 浏览: 97

锅边

近期明显懒了,这不又有好几个周没写博客了。今天天气不错,下午篮球队的固定活动2点半正常开始,趁着这点时间,写几句。

锅边是福州的美食,上个月有幸品尝了一下,大大的一海碗,陈医师帮我点好后才知道分量这么多,更没想到的是居然也能吃完,你可以想想有多好吃了。这里再次感谢陈医师。

除了锅边其实还有一个意外的收获,那就是雾霾茶,陈医生得知上海、北京空气污染严重,雾霾频繁,根据经方理论、精心配伍,弄了一副雾霾茶,并通过中药厂加工,弄成免煎的冲剂,每天一杯,帮助身体排出吸进去的雾霾颗粒。

仔细想想,面对如此的环境污染,我们能做的有限,从不能每天都带着口罩,也不能光在室内呼吸经过空气净化器过滤过的空气,总要在室外活动,总要吸进去雾霾的颗粒,时间久了,留在身体里面,对肺、心脏、大肠都不好。

附上茶的介绍,有需要的朋友可以联系我品尝体验。我还做了一个独立的博客,记录对抗雾霾的一些资料,请访问:[URL=http://www.wumaitea.com]雾霾茶[/URL]

<br/>黄金肺肠茶<br/>GOLDEN BODY CLEAN<br/>此茶是经方明师陈杰宽按照中医经方理论设计,清理大气污染,雾霾对肺造成的毒害,同时清除垃圾食品对大肠的伤害。并有保精阳,增精气,护元神,长寿安康之效果。 <br/> <br/>功效:清理雾霾污染引起肺的毒积,痰积,寒积,湿积,热毒。同时清除垃圾食品对大肠的伤害。通过对肺肠的高度清理,对鼻敏感,咳嗽,哮喘,声沙,慢性咽炎,皮肤湿疹,暗疮,黑斑也有缓急的作用。一茶多效。从而达到长寿安康,保精之作用。<br/>

Tags:

发布: cuiwenyuan 分类: 技术管理与生活 评论: 0 浏览: 121

Windows 2008 R2 64位 Web服务器设置点滴

老服务器被黑了很久,也一直没清理掉木马,昨天开始把服务器升级到2008了。默认安装好IIS以后,在做了基本的服务器安全设置(所有盘符只给SYSTEM权限)以后,访问网站出现如下错误,这里记录一下解决办法。

第一个是401权限问题,报错如下:

<br/>401 - 未授权: 由于凭据无效,访问被拒绝。<br/>您无权使用所提供的凭据查看此目录或页面。<br/>



解决方案如下:

<br/>1、打开“IIS信息服务管理器”——》选择你发布的网站——》选择功能视图中的“身份验证”——》右键匿名身份验证,选择“编辑”,选择并确认“特定用户IUSR”;<br/>2、右键要发布的网站文件夹,选择“安全”——》“编辑”——》“添加”——》“高级”——》“立刻查询”——》选择“IUSR”用户,然后保存;<br/>



第二个报错是ASP网站无法解析,解决方法如下:

应用程序池启用32位的程序支持


ASP全局设置启用父目录


如果是有Access数据库,还需要给ASP网站下的可修改的目录及文件修改和编辑的权限。

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 1 浏览: 138

MSSQL 2008 R2附加数据库出现Readonly只读的处理

今天在新弄得MSSQL 2008 R2测试服务器上附加数据库时,一直出现附加后Readonly(只读)的情况,经过网络搜索,虽然其他方案也能解决问题,但还是根据以前的《[URL=http://www.cuiwenyuan.com/shanghai/post/Operating-system-error-5-5failed-to-retrieve-text-for-this-error-Reason-15105-Microsoft-SQL-Server-Error-5120.html]Win7 64位 + SQL 2008 R2下Attach Database的一个错误:Operating system error 5[/URL]》找出了如下解决办法。



<br/>1、打开该数据库文件及日志的属性窗口,选择“属性”菜单->选择“安全”标签->选择“编辑”按钮。<br/>2、在选择组或用户名列表中,选择Authenticated Users,在权限列表中选中完全控制。<br/>3、选择"确定"按钮关闭对话框。<br/>4、此时再次附加数据库,即可成功<br/>

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 74

越过山丘 还有山丘

电脑里,车载mp3里,一直放着全套的《李宗盛的音乐旅程.不舍.香港版》,以为他不会再唱了,后来喜欢上有他加盟的纵贯线的《出发》,接着又听到了这首《山丘》,明年这2首个会入我车载mp3榜单前三甲了。

附上这段我喜欢的《出发》歌词片段

<br/>出发啦 不要问那路在哪<br/>迎风向前 是唯一的方法<br/>出发啦 不想问那路在哪<br/>运命哎呀 什么关卡<br/>当车声隆隆 梦开始阵痛<br/>它卷起了风 重新雕塑每个面孔<br/>夜雾那么浓 开阔也汹涌<br/>有一种预感 路的终点是迷宫<br/>


还有《山丘》的mtv

Tags:

发布: cuiwenyuan 分类: 五音五色 评论: 0 浏览: 67

升级IIRF from v1.2 to v2.1

用了好多年的IIS下的伪静态利器IIRF,因为服务器的升级计划,也将从1.2升级到2.1了,不多说了,IIRF的最新版本介绍及升级使用注意事项请看[URL=http://iirf.codeplex.com/]官方网站[/URL]。

在ASP时代,这个工具真的是帮助巨大,.Net年代继续发挥余热。即便是现今MVC的Router出现了,这个IIRF还是会需要的。

我安装的是全局调用,在安装后,所有应用程序池会自动停掉,查看系统日志,有报错:IIRF: event ID 3, IIRF: Could not open ini file '' (error: 13, ).



经Google官方的论坛,得到启示是我的站点用户访问权限的问题,只需要给IIRF.ini文件加上IIS_WPG的访问权限即可。



另外需要注意的就是,全局开启IIRF的时候,每个站点根目录下面都需要放置IIRF.ini文件,即便是空文件都行,这点我觉得需要改进。

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 1 浏览: 66

速度超快:使用SqlBulkCopy导入DataTable数据到MSSQL数据库

[URL=http://www.cuiwenyuan.com/shanghai/post/Import-Excel-Into-Database-via-NPOI2-In-CSharp-Web-Development.html]上篇文章[/URL]提到使用NPOI导入Excel到数据库,其实只完成了一半的工作,那就是Excel上传到服务器,然后读取到了内存的DataTable,最后面的插入数据库的操作是另一半工作。

相关的参考代码,原理就是创建一个临时表,把读取到内存的Excel数据(DataTable)使用SqlBulkCopy快速导入到数据库,然后再导入真正的业务表。在我导入13800条记录的时候,基本上10秒之内搞定,当然了最初用那个循环DataTable,然后再循环中使用Entity的方式添加,速度不知快了多少倍。

越多的业务开发,越来越感觉到吉日嘎拉的GPM平台的便利,现在基本上有一个数据维护管理类的应用,数据表根据模型建立好之后,基本上当天就能弄好。后期的工作重点要放在报表分析、复杂查询上了,因为这是用户喜欢用OA的理由之一。

<br/>#region public void SqlBulkCopyData(DataTable dt) 利用Net SqlBulkCopy 批量导入数据库,速度超快<br/>        /// <summary><br/>        /// 利用Net SqlBulkCopy 批量导入数据库,速度超快<br/>        /// </summary><br/>        /// <param name="dt">源内存数据表</param><br/>        public void SqlBulkCopyData(DataTable dt)<br/>        {<br/>            // SQL 数据连接<br/>            SqlConnection sqlConnection = null;<br/>            // 打开数据库<br/>            this.Open();<br/>            // 获取连接<br/>            sqlConnection = (SqlConnection)GetDbConnection();<br/>            using (SqlTransaction tran = sqlConnection.BeginTransaction())<br/>            {<br/>                // 批量保存数据,只能用于Sql<br/>                SqlBulkCopy sqlbulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.Default, tran);<br/>                // 设置源表名称<br/>                sqlbulkCopy.DestinationTableName = dt.TableName;<br/>                // 设置超时限制<br/>                sqlbulkCopy.BulkCopyTimeout = 1000;<br/><br/>                foreach (DataColumn dtColumn in dt.Columns)<br/>                {<br/>                    sqlbulkCopy.ColumnMappings.Add(dtColumn.ColumnName, dtColumn.ColumnName);<br/>                }<br/>                try<br/>                {<br/>                    // 写入<br/>                    sqlbulkCopy.WriteToServer(dt);<br/>                    // 提交事务<br/>                    tran.Commit();<br/>                }<br/>                catch<br/>                {<br/>                    tran.Rollback();<br/>                    sqlbulkCopy.Close();<br/>                }<br/>                finally<br/>                {<br/>                    sqlbulkCopy.Close();<br/>                    this.Close();<br/>                }<br/>            }<br/>        }<br/>        #endregion<br/>



<br/>if (dt != null)<br/>        {<br/>            // 用循环把数据一行行输出到缓冲流中<br/>            if (dt.Rows.Count <= 100)<br/>            {<br/>                for (int i = 0; i < dt.Rows.Count; i++)<br/>                {<br/>                    PurchasePriceComparisonEntity entity = new PurchasePriceComparisonEntity();<br/>                    entity.BPS = dt.Rows[i]["BPS"].ToString();<br/>                    entity.Family = dt.Rows[i]["Family"].ToString();<br/>                    entity.PartNumber = dt.Rows[i]["PartNumber"].ToString();<br/>                    entity.POPriceCurrentMonth = dt.Rows[i]["POPriceCurrentMonth"].ToString();<br/>                    entity.POPriceCurrentYear = dt.Rows[i]["POPriceCurrentYear"].ToString();<br/>                    entity.POPriceLastMonth = dt.Rows[i]["POPriceLastMonth"].ToString();<br/>                    entity.POPriceLastYear = dt.Rows[i]["POPriceLastYear"].ToString();<br/>                    entity.ProductGroup = dt.Rows[i]["ProductGroup"].ToString();<br/>                    entity.SPG = dt.Rows[i]["SPG"].ToString();<br/>                    entity.Supplier = dt.Rows[i]["Supplier"].ToString();<br/>                    entity.TotalPurchaseYTDSpendCurrentMonthPOPrice = dt.Rows[i]["TotalPurchaseYTDSpendCurrentMonthPOPrice"].ToString();<br/>                    entity.TotalPurchaseYTDSpendCurrentYearPOPrice = dt.Rows[i]["TotalPurchaseYTDSpendCurrentYearPOPrice"].ToString();<br/>                    entity.TotalPurchaseYTDSpendLastMonthPOPrice = dt.Rows[i]["TotalPurchaseYTDSpendLastMonthPOPrice"].ToString();<br/>                    entity.TotalPurchaseYTDSpendLastYearPOPrice = dt.Rows[i]["TotalPurchaseYTDSpendLastYearPOPrice"].ToString();<br/>                    entity.YTDPurchaseQTY = float.Parse(dt.Rows[i]["YTDPurchaseQTY"].ToString());<br/>                    // 追加到数据库<br/>                    manager.Add(entity);<br/>                    // 置空<br/>                    //entity = null;<br/>                }<br/>            }<br/>            // 快速导入<br/>            else<br/>            {<br/>                // 指定表名<br/>                dt.TableName = "PurchasePriceComparisonTemp";<br/>                manager.SqlBulkImport(dt);<br/>            }<br/>        }<br/>        // 清空掉dt里的内容<br/>        dt = null;<br/>

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 1 浏览: 299