在C#中建立复杂的、灵活的SQL查询命令

在C#中建立复杂的、灵活的SQL查询命令,第1张

在C#中建立复杂的、灵活的SQL查询命令,第2张

SelectQueryBuilder类允许您在代码中构建复杂的SQL语句和命令。这也有助于避免SQL注入袭击。

介绍

承认,而且我们都这么做过,也认为下面的方式是和谐的方式。也就是我们构建大量包含所有Where子句的字符串,然后提交给数据库执行。向我们的SQL字符串添加语句可能会带来错误和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 "+max records+" * FROM Customers ";
string WHERE connector = " WHERE ";
if (companyNameTextBox。text . Length > 0)
{
statement+= where connector;
statement+= " company name like "+company name textbox。text+“%”;
where concatator = " AND ";
}

if (cityTextBox。text . Length > 0)
{
statement+= where connector;
statement+= " City like ' "+City textbox。text+“%”;
where concatator = " AND ";
}
if(country combobox。选择编辑!= null)
{
statement+= where connector;
语句+= "Country = '" + countryComboBox。SelectedItem+“”;
where concatator = " AND ";
}

相信上面的代码你已经很熟悉了。你可能已经这样用了十几年了,或者你已经编码了数据库驱动的搜索功能。让我告诉你这个想法:这种查询你的数据库的方法不能再用了,很难看,也不安全。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在C#中建立复杂的、灵活的SQL查询命令

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情