1

以下の機能を達成する必要があります

     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 インジェクションを使用していないため、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);。これは単に時間の無駄です。クエリには異なるパラメーターの数を含めることができ、クエリのパラメーターの数に依存しない関数が必要です。

4

3 に答える 3

0

これを、nameをパラメーターとして受け取るストアド プロシージャに変換する必要があります。

ここから読み始めるのが良いでしょう。http://msdn.microsoft.com/en-us/library/ff648339.aspx

于 2013-05-09T16:15:12.507 に答える