gpt4 book ai didi

c# - SQL注入(inject)参数化查询

转载 作者:搜寻专家 更新时间:2023-10-30 22:14:29 24 4
gpt4 key购买 nike

<分区>

我需要实现下面的功能

     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 注入(inject)的风险,因为它没有使用 com.Parameters.AddWithValue("@name", name);。是否有任何替代方法可以通过调用来实现停止sql注入(inject)的功能。

对于那些不明白我的问题的人

例如我有另一个查询 select * from [party details] where address=@address and name=@anme ,为此我需要再次编写一个我使用 的函数com.Parameters.AddWithValue("@address", 地址);com.Parameters.AddWithValue("@name", name);,这简直是在浪费时间。查询可以有不同的参数数量,我需要不依赖于查询参数数量的函数。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com