我需要实现下面的功能
public PartyDetails GetAllPartyDetails(string name)
{
try
{
String query = "select * from [Party Details] where name=@name ";
pd = new PartyDetails();
com = new SqlCeCommand(query, con);
com.Parameters.AddWithValue("@name", name);
con.Open();
sdr = com.ExecuteReader();
while (sdr.Read())
{
pd.name = sdr.GetString(0);
}
con.Close();
return pd;
}
catch (Exception e)
{
con.Close();
throw e;
}
}
但是这个函数对我来说效率不高,因为我不需要仅仅因为查询的变化而编写不同的函数代码。
现在这是我需要的
public PartyDetails GetAllPartyDetails(string query)
{
try
{
pd = new PartyDetails();
com = new SqlCeCommand(query, con);
con.Open();
sdr = com.ExecuteReader();
while (sdr.Read())
{
pd.name = sdr.GetString(0);
}
con.Close();
return pd;
}
catch (Exception e)
{
con.Close();
throw e;
}
}
但这增加了sql注入的风险,因为它没有使用com.Parameters.AddWithValue("@name", name);
。是否有任何替代方法可以通过调用函数来停止sql注入来实现。
对于那些不明白我的问题的人
例如我有另一个查询select * from [party details] where address=@address and name=@anme
,为此我需要再次编写一个我使用的函数com.Parameters.AddWithValue("@address", address);
com.Parameters.AddWithValue("@name", name);
,这只是浪费时间。查询可以有不同的参数,我需要不依赖于查询中参数的函数。