1

私は異なる場所の条件でデータを選択するデータベース機能を持っています.これを達成するための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 インジェクションが可能です。

私のアプリケーションはデータ損失に耐えられないため、どちらが安全で効率的ですか。

4

3 に答える 3