闲云

    一张白纸,总想写上点什么...
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

利用〔正则〕检查.NET访问数据库Sql的正确性

Posted on 2006-09-13 12:42 闲云 阅读(110) 评论(2)  编辑 收藏 所属分类: .NET
背景
        利用.NET访问数据库的时候,需要写一些SQL语句。但是由于SQL的可读性、
不好测试的特点。经常会写错字母,漏写了参数等。直到写界面层的时候才发现
问题,回头再来改,十分痛苦。

想法
        利用数据库访问脚本及其数据库字段的命名约定。比如,INT类型就用INT
结尾,VARCHAR就用VCHR结尾等。有了这些,我们就可以根据约定自动生成
相关类型的数据了。下面就是利用程序生成的例子!

UPDATE TABLE
SET 
COLUMNNAME1_VCHR 
= ?,
COLUMNNAME2_CHR 
= ?,
COLUMNNAME3_VCHR 
= ?
WHERE COLUMNNAME4_INT = ?
===   CONVERT TO == >>>
UPDATE TABLE 
SET 
COLUMNNAME1_VCHR
='aaaa',
COLUMNNAME2_CHR
='aaaa',
COLUMNNAME3_VCHR
='aaaa' 
WHERE COLUMNNAME4_INT=17;


然后这些脚本就可以在SQLNavigat中运行了,以判断字段的正确与否。

正则表达式
         利用正则表达式匹配、捕抓一些我们需要的特定格式的数据非常的方便。比
如,捕抓 "ColumnName=?"  "INSERT ..." "SELECT ..."  "(?,?,?,?)"  等。这样我们就可
以快速的捕抓出这些数据,然后根据命名约定进行数据替换。
         几个正则Pattern(不是太严谨),有关正则的学习,可以参照我Blog中的资源
几个模式:
     匹配    "INSERT ..." "SELECT ..." "DELETE..." "UPDATE ..."    
                "\s*(INSERT|DELETE|SELECT|UPDATE) ((?!\" ).)*"
    
     匹配    " VAR = ?" "VAR<?" "VAR>?" "VAR>=?"
                 \w*\s*  ( \= | \> | \>\= | \<\= | \!\= )   \s*\?
     匹配    "(?, ?, ?, ?)"
                 \( ((?!\().)*\)
    
程序片断

根据约定生成测试值

 


private string GenerateRadomValue(string columnName)
        
{
            
string strRadom = string.Empty;
            
if (columnName.Contains("INT"))
            
{
                Random ran 
= new Random();
                strRadom 
= ran.Next(100).ToString();
            }

            
else if (columnName.Contains("CHR"|| columnName.Contains("VCHR"))
            
{
                strRadom 
= "'aaaa'"// 自己定义
            }

            
else if (columnName.Contains("DAT"|| columnName.Contains("DT")) 
            
{
                strRadom 
= "to_date('2005-11-25 00:00:00', 'yyyy-MM-dd hh24:mi:ss')";
            }

            
return strRadom;
        }

程序下载
        源程序 下载


 

Feedback

#1楼    回复  引用    

2006-12-04 20:12 by linux[匿名] [未注册用户]
想法不错,单不实际,不通用,而且,有悖一般数据库命名规范,完全可以自己写个程序获取到数据库的类型,所以,你那样设置是多此一举,做代码生成就应该做通用的,即使是不规范的数据库设计,也应该可以准确的生成出正确的代码。
请看 我写的一个ASP.NET控件:详情见: 自己动手,打造数据库通用查询控件http://blog.csdn.net/forlinux/archive/2006/12/03/1428308.aspx

#2楼    回复  引用    

2006-12-04 20:15 by linux[匿名] [未注册用户]
呵呵,乱说的,希望别介意。。。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-09-13 12:46 编辑过
成果网帮您增加网站收入


相关链接: