选项1
看看 dapper-dot-net,它是一个微型 ORM,允许您将查询转换为对象。您可以将它们放在数据访问层中,如果您以后需要一个完整的 ORM(如实体框架),移动它会很容易。
http://code.google.com/p/dapper-dot-net/
Rob Connery 也有大量的https://github.com/robconery/massive
如果您正在运行更大的查询,这可能表明您需要一个完整的 ORM。
选项 2
使用参数化查询。您可以编写 SQL 来获取参数。您可以存储 .sql 文件,也可以拥有一个包含查询的 xml 文件。您的查询将包含以下参数:
我想你的 xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8" ?>
<sql-queries>
<statement>
<id>get-id</id>
<sql>SELECT UserId FROM User WHERE UserName = @UserName AND Password = @Password;</sql>
</statement>
</sql-queries>
加载查询后(通过读取文本或读取 XML 文件)。您可以使用参数执行。
using (SqlCommand cmd = new SqlCommand(sql))
{
// Create the parameter objects as specific as possible.
cmd.Parameters.Add("@UserName", System.Data.SqlDbType.NVarChar, 50);
cmd.Parameters.Add("@Password", System.Data.SqlDbType.NVarChar, 25);
// Add the parameter values. Validation should have already happened.
cmd.Parameters["@UserName"].Value = UserName;
cmd.Parameters["@Password"].Value = Password;
cmd.Connection = connnection;
try
{
cmd.Connection.Open();
var userId = cmd.ExecuteScalar();
}
catch (SqlException sx)
{
// Handle exceptions before moving on.
}
}
代码来自: http: //software-security.sans.org/developer-how-to/fix-sql-injection-microsoft-.net-with-parameterized-queries
在这种情况下,我肯定会做的一件事是加密 XML,这样用户就无法修改它,但这取决于你。您可以在这样做时查看此链接加密和解密字符串