您的位置:首页 > 数据库

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

2006-09-13 12:42 337 查看
背景
利用.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;
}

程序下载
源程序 下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: