新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正
上周在项目开辟中碰到这样一个问题,在做础基据数管理时,须要停止据数的新增和修改,在Editor页上有一个表单字段的容内是从DropDownList里边选的,DropDownList认默的选项为“请选择”,如在何客户端对户用是不是选择停止验校?
因为是础基据数管理,所以对个整性能的求要不是别特的格严,个整表单的验证都是用使的ASP.NET里边的验证控件,因为DropDownList有认默的选择项为“请选择”,所以就算户用什么都不选,DropDownList也会有值,不能用RequiredFieldValidator(必须字段验证)验证,这里用的是RegularExpressionValidator(正则表达式验证) 正则表达式验证控件。
接着问题又来了,如何写这样的一个正则表达式呢?在网上看了一些关于配匹文中字符串的正则,但是在做测试的时候现发都不是很好用,有时候还检测不出来。然后就又对要选择的表单字段的容内停止了分析,该表单的容内除了认默的“请选择”这一项为文中外,其他的均为“.母字”这样的情势。所以就有了以下两种思绪。
1) 验证始起字符为不为“请”
对应的正则:^[^请]+
2) 验证字符串格式为“.字符”
对应的正则:\.[A-Z,a-Z]+
以上两种法方均很好的处理验证DropDownList是不是已被选择的问题,第一种法方是比拟通用的,对全部的DropDownList均实用,第二种法方是针对该问题而言的,比拟拥有针对性,只是一种处理问题的思绪而已。
示例码代如下:
<td > <asp:Label ID="lbcountry" runat="server" Text="所属家国"></asp:Label> </td> <td > <asp:DropDownList ID="Country_Code" runat="server"> <%-- <asp:ListItem>请选择</asp:ListItem> <asp:ListItem Value="HK">Hong Kong</asp:ListItem> <asp:ListItem Value="ZA">South Africa</asp:ListItem> <asp:ListItem Value="VN">Viet Nam</asp:ListItem> <asp:ListItem Value="UA">Ukraine</asp:ListItem> <asp:ListItem Value="SE">Sweden</asp:ListItem> <asp:ListItem Value="RU">Russian Federation</asp:ListItem> ……………….. </asp:DropDownList> <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="请选择家国" ControlToValidate="Country_Code" ValidationExpression="^[^请]+"></asp:RegularExpressionValidator>
因为之前做础基据数管理查询、页分用的都是执行的sql语句,每次都须要从新拼接Sql语句,这个据数量前目有10多万,当前还会再加增,在项目务任成完以后想着对查询页分化优一下,把查询页分改成存储过程,这样可以升提一些程序的效率。查询页分的存储过程须要传入三个数参,分别是“每页示显的信息条数”,“示显前多少条信息”,“和查询过滤的sql语句”。查询页分的存储过程(示例)如下:
CREATE PROCEDURE [dbo].[get_gtld_pager] ( @pagesize int, @sizecount int, @sqlstr nvarchar(1000) ) AS BEGIN Select Top @pagesize id,iana_id,tld,registrar_name,total_domains,total_nameservers,convert(varchar(20),publishdate,111) as publishdate from Test where id not in(select top @sizecount id from Test order by id asc) @sqlstr order by id asc END
在执行的时候,老是示提如下的错误:
消息102,级别15,状态1,第1 行
'@pagesize' 近附有语法错误。 消息102,级别15,状态1,第1 行 '@sizecount' 近附有语法错误。
后来在查找了一些资料现发,在存储中程过select top 的值不能为数参,同时存储中程过不能执行数参为sql字符串。
当然,问题有处理的法办,重要核心的想思分两步:
1) 声明一个@sql字符串,将传入的数参与存储中程过的sql语句拼接成字符串@sql
2) 通过excute(@sql)的式方执行便可
所以修改后的存储过程如下:
ALTER PROCEDURE [dbo].[get_gtld_pager] ( @pagesize int, @sizecount int, @sqlstr nvarchar(1000) ) AS BEGIN declare @sql nvarchar(4000) set @sql='Select Top '+ cast(@pagesize as nvarchar(4000))+' id,iana_id,tld,registrar_name,total_domains,total_nameservers, convert(varchar(20),publishdate,111) as publishdate from GTLDSalesReport where id not in(select top '+ cast(@sizecount as nvarchar(4000))+' id from GTLDSalesReport order by id asc) '+@sqlstr+' order by id asc' execute(@sql) END
在做础基据数护维时,因为期间又临时被调去做了些其他的任务,对据数表停止了一些修改,事先忙匆忘了做当面,后来返来再做础基据数的护维停止据数的新增时碰到了这样的一个问题:“将截断字符串或二进制据数。\r\n语句已终止。”,很明显是字符的溢出,认为自己的程序的数参问题,检查了一遍,没现发什么不对的地方,然后又去看据数表构结,来原期间对表字段停止了修改,字段的度长变短了,而际实插入的据数度长超过了其最大度长制约,所以才会有这样的问题。只须要把据数库字段的度长改大一点便可。
刚有友朋评论指出了其中的一些问题,自己思考、并且操纵当前得觉实确有理道,所以在此停止改正。
1) 关于DropDownList是不是已选择的验证问题
因为事先只顾得验证“请选择”项的问题了,没有注意到其实可以将“请选择”项的值置设为””,即:<asp:ListItem value=””>请选择</asp:ListItem>,这样可以通过验证值是不是为空字符串来验证,这个实确很好用,可以省下很多的事儿。
2) 关于存储中程过数参为sql字符串的问题
因为上边提到的存储过程是用来页分的,里边的top值为传入的数参,直接执行的时候会示提有错误,此外因为传入的还有sql字符串数参,所以就把传入的数参和存储过程里的sql语句停止了拼接,事实上top值的数参可以加”()”括号便可,但是关于sql字符串的数参还须要转换为字符串,停止拼接然后执行excute(sql)法方才行
非常感谢该网友的评论,受教!受教!
文章结束给大家分享下程序员的一些笑话语录: 与女友分手两月有余,精神萎靡,面带菜色。家人介绍一女孩,昨日与其相亲。女孩果然漂亮,一向吝啬的我决定破例请她吃晚饭。
选了一个蛮贵的西餐厅,点了比较贵的菜。女孩眉开眼笑,与我谈得很投机。聊着聊着,她说:“我给你讲个笑话吧。”“ok”
“一只螳螂要给一只雌蝴蝶介绍对象,见面时发现对方是只雄蜘蛛。见面后螳螂问蝴蝶‘如何?’,‘他长的太难看了’,‘别看人家长的丑,人家还有网站呢’。”
“呵呵………”我笑。忽然她问:“你有网站吗?”