利用〔正则〕检查.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;
}
程序下载
源程序 下载
利用.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;
}
程序下载
源程序 下载
相关文章推荐
- 利用正则表达式类解析SQL语句,达到Worklist兼容各个RIS数据库的目的
- vc 利用ADO 访问sql 数据库
- 利用Cache缓存数据DataTable数据提高大数据量访问性能-.NET教程,数据库应用
- 利用正则表达式类解析SQL语句,达到Worklist兼容各个RIS数据库的目的
- Silverlight访问数据库实例 -- 利用WCF Linq sql ——————一篇很好的文章
- C# 中利用.NET访问数据库(sybase)
- .net利用SQLBulkCopy进行数据库之间的大批量数据传递
- .net利用SQLBulkCopy进行数据库之间的大批量数据传递
- 利用正则表达式类解析SQL语句,达到Worklist兼容各个RIS数据库的目的
- Silverlight访问数据库实例一 ----- 利用WCF Linq sql
- oracle只安装客户端与pl/sql即可远程访问数据库
- SQL中利用DMV进行数据库性能分析
- .NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(2)
- 利用SqlHelper.cs实现Web程序与数据库的连接
- 利用正则表达式统计访问频率
- MS SQL Server 2008 新特性 - User-Defined Table Type 实现将.NET DataTable作为参数传入数据库
- webpart中访问SQL 2005 数据库问题的处理办法
- C# 利用 DbUp 通过多个SQL Script文件完成对数据库的更新
- 利用SQL语句查询数据库中所有表
- 检查数据库当前运行的SQL