私は異なる場所の条件でデータを選択するデータベース機能を持っています.これを達成するための2つの可能なアプローチがあります. 初め
public string select(string name)
{
string s = null;
query = "select * from tablename where name=@name";
con.Open();
com=new SqlCeCommand(query,con);
com.Parameters.AddWithValue("@name",name);
sdr=com.ExecuteReader();
while (sdr.Read())
{
s = sdr.GetString(0);
}
return s;
}
このアプローチでは、 order by 、 name の代わりの address 、 where query 、 top 20 などの複数のパラメーターなど、クエリの小さな変更に対して別の関数をコーディングする必要があります。ただし、このアプローチは、SQL インジェクションに関して保護されています。2番
public string select(string query)
{
string s = null;
con.Open();
com=new SqlCeCommand(query,con);
sdr=com.ExecuteReader();
while (sdr.Read())
{
s = sdr.GetString(0);
}
return s;
}
2番目のアプローチでは、データベースクエリを値付きの関数引数に渡すのでcom.Parameters.AddWithValue("@name",name);
、選択クエリの変更のために別の関数をコーディングする必要はありません。クエリのパラメーターの値は、ユーザーではなくコードによって指定されます。ユーザーがパラメーターに入力を与えていないため、このアプローチでは SQL インジェクションが可能です。
私のアプリケーションはデータ損失に耐えられないため、どちらが安全で効率的ですか。