将查询作为参数传递
我知道,不推荐。 SQL注入的可能风险。将查询作为参数传递
在我目前的应用程序中,我创建了一个包含可重用函数的类。一个这样的功能是:
public static Int32 InsertNewRecord(string myQuery)
{
ModCon.OpenConnection();
MySqlCommand cmdInsert = new MySqlCommand(myQuery, ModCon.myCN);
try
{
Int32 RecordsAffected = cmdInsert.ExecuteNonQuery();
return RecordsAffected;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error:", MessageBoxButtons.OK, MessageBoxIcon.Error);
return 0;
}
finally
{
cmdInsert.Dispose();
ModCon.CloseConnection();
}
}
这个类有很多这样的方法可以重用。有一种方法来填充一个DataGridView,我通过DataGridView名称和SQL查询来填充它。
我的应用程序目前是一个独立的Windows应用程序。什么可能是专业的方式来实现这一点,而不用担心SQL注入?
上面的方法在一个类中,每当我需要这些方法时,我都会在另一个类中创建这个类的一个实例。
你要么两个选择:
您可以创建您的查询的描述。您可以通过使用表名创建
InsertQuery
类来完成此操作。有了这个,你可以添加过滤器,例如,创建一个类EqualFilter
,然后你可以用AndFilter
组成一个类来得到两个相等的比较结果;如果你认为这是很多工作,它是。另一种方法是使用像NHibernate或Entity Framework这样的ORM框架。这为你做了所有这些,还有更多。
你可能想研究在C#中使用正则表达式。 Google上有很多资源可以轻松找到。 只要防止任何可疑字符(如%,=,?,& ...)(可能会导致SQL注入查询)传递给您的方法的参数myQuery。 应该找到。也许这不是专业的方式来做到这一点,但...我只是说。 祝你好运。
感谢您的建议,但请告诉我专业的方式。 – RKh 2010-10-30 18:08:04
不要将您的参数传递给您的查询。创建System.Data.SqlClient.SqlCommand并使用Command.Parameters.Add(...
添加参数。这完全防止了SQL注入。
是否在myQuery中传递了通过查询字符串传入的内容? – Oded 2010-10-30 17:56:24
是的。但请记住,目前它不是一个Web应用程序。 – RKh 2010-10-30 18:00:04