我爱Aspx >> Asp.Net >> 在C#中建立复杂的、灵活的SQL查询/命令SelectQueryBuilder类允许在你的代码中建立复杂的SQL语句和命令。它也能帮助于避免SQL注入式攻击。
介绍承认,并且我们都这样作过,也认为下面的方式是最好的和唯一的方式。就是我们建立大量的字符串包含所有的Where子句,然后提交到数据库去执行它。来断的加语句到我们的SQL字符串,极有可能会带来Bugs和SQL注入式攻击的危险。并且也使得我们的代码更难看也不易于管理。
这种情况必须停止,但如何停止?有人说使用存储过程。但它并没有真正的解决这个问题。你还得动态建立你的SQL语句,只不过有问题移到数据库层面上了,依然有SQL注入的危险。除了这个“解决方案”外,可能还有非常多的选择供你考虑,但它们都会带来一个基本的挑战:让SQL语句工作的更好、更安全。
当我从我的在线DAL(数据访问层)生成工具http://www.code-engine.com/建立C#模板时,我想提供一个易于使用的方法来定制查询数据。我不再想使用“字符串查询”(我以前开发的模板)来查询数据。我厌烦这种凌乱的方式来得到数据。我想用一种清晰的、直觉的、灵活的、简单的方式从表中选择数据,联接一些别的语句,使用大量的Where子句,用一些列来分组数据,返回前X个记录。
我开始开发所想的有这种严密功能的SelectQueryBuilder类。它暴露了许多属性和方法,你能很容易地在Select语句中使用它们。一旦调用BuildQuery()和BuildCommand()方法,它能提供一种更好的旧的“字符串查询“或可以使用命令参数的DbCommand对象来查询数据。
使用代码旧的方式的代码
下面的代码阐明了以前建立SELECT语句的方法,它使用许多类变量来说明应该使用那种连接操作(WHERE,或者OR),同时也给你的数据库带来了可能的SQL注入式攻击。
| string statement = "SELECT TOP " + maxRecords + " * FROM Customers ";string whereConcatenator = "WHERE ";if (companyNameTextBox.Text.Length > 0){ statement += whereConcatenator; statement += "CompanyName like '" + companyNameTextBox.Text + "%' "; whereConcatenator = "AND ";}if (cityTextBox.Text.Length > 0){ statement += whereConcatenator; statement += "City like '" + cityTextBox.Text + "%' "; whereConcatenator = "AND ";}if (countryComboBox.SelectedItem != null){ statement += whereConcatenator; statement += "Country = '" + countryComboBox.SelectedItem + "' "; whereConcatenator = "AND ";} |
病毒及流氓软件自我复制的简单实..[03-16]
用C#和WMI获取逻辑驱动器详细信息[03-16]
用Visual C#开发简单的复合控件[03-16]
Visual C# 2.0匿名方法揭密[03-16]
深入理解C# 3.0的五项主要改进[03-16]
病毒及流氓软件自我复制的简单实..[03-16]
在C#中建立复杂的、灵活的SQL查询..[03-16]
用C#和WMI获取逻辑驱动器详细信息[03-16]
Visual C# 2.0匿名方法揭密[03-16]
用Visual C#开发简单的复合控件[03-16]
VS2005+Crystal Report开发Web应..[03-17]
ASP.NET 2.0服务器控件之客户端功..[03-17]
ASP.NET+Atlas创建客户端Web应用..[03-17]
基于ASP.NET技术的驾校网页设计[03-17]
ASP.NET+Atlas创建客户端Web应用..[03-17]
ASP.NET 2.0服务器控件之客户端功..[03-17]
基于ASP.NET技术的驾校网页设计[03-17]
ASP.NET 2.0服务器控件开发之简单..[03-17]
为.NET程序批上WPF的绚丽外衣[03-17]
ASP.NET编程入门随想之宽容[03-17]