Проблема с добавлением параметров SQL из уровня доступа к данным в C # - PullRequest
0 голосов
/ 18 июля 2011

Сначала я привожу примеры двух методов

public static List<FormGridEntity> GetAllCandidatesByProgram(string programShortName)
    {
        List<FormGridEntity> formGridEntities = null;
        try
        {
            string cmd = SELECT + " WHERE " + CANDIDATE_PROGRAM_PA + " = " +       CANDIDATE_PROGRAM;`enter code here`
            //string cmd = SELECT

            DAOParameters dps = new DAOParameters();
            dps.AddParameter(CANDIDATE_PROGRAM_PA, programShortName);
            List<SqlParameter> ps = Common.Methods.GetSQLParameters(dps);
            SqlDataReader dataReader = QueryHandler.ExecuteSelectQuery(cmd, ps);
            formGridEntities = Maps(dataReader);
            dataReader.Close();
        }

        catch (Exception exception)
        {
            throw exception;
        }
        return formGridEntities;
    }

, а другой метод -

public static List<FormGridEntity> GetAllCandidatesByDates(DateTime initialDate,DateTime finalDate)
    {
        List<FormGridEntity> formGridEntities = null;
        try
        {
            string cmd = SELECT + " WHERE " + FORM_SUBMISSION_DATE_PA + " BETWEEN " + initialDate + " AND " + finalDate;
            //string cmd = SELECT

            DAOParameters dps = new DAOParameters();
            //What will I do here? since 
            **//dps.AddParameter(FORM_SUBMISSION_DATE_PA, initialDate);
            //dps.AddParameter(FORM_SUBMISSION_DATE_PA, finalDate);**
            List<SqlParameter> ps = Common.Methods.GetSQLParameters(dps);
            SqlDataReader dataReader = QueryHandler.ExecuteSelectQuery(cmd, ps);
            formGridEntities = Maps(dataReader);
            dataReader.Close();
        }

        catch (Exception exception)
        {
            throw exception;
        }
        return formGridEntities;
    }

Я прокомментировал

Здесь термины заглавных букв являются постояннымичто выше в классе как

private const string FORM_PURCHASING_DATE = "DateOfPurchase";
private const string FORM_PURCHASING_DATE_PA = "@DateOfPurchase"
private const string FORM_SUBMISSION_DATE = "DateOfSubmission";
private const string FORM_SUBMISSION_DATE_PA = "@DateOfSubmission";

SELECT также определен правильно.Я использую этот слой отлично.Но теперь произошел сценарий, когда я запутался, что делать.До сих пор я добавлял значения с параметром, который имеет отношение один к одному.Но во втором методе я использую оператор между, где два значения относятся к одному параметру, что я напишу здесь, чтобы все работало правильно.Я закомментировал конкретный регион, который я хочу изменить.пожалуйста, помогите мне, если это возможно.Вот метод GetSQLParameters public static List GetSQLParameters (DAOParameters dps) {Список параметров = новый список ();

        foreach (DictionaryEntry de in dps.hs)
        {
            SqlParameter p = new SqlParameter();
            p.ParameterName = de.Key.ToString();
            if (de.Value.ToString() == Convert.ToString(0))
            {
                p.Value = DBNull.Value;
            }
            else
            {
                p.Value = de.Value;
            }

            parameters.Add(p);
        }

        return parameters;

1 Ответ

0 голосов
/ 18 июля 2011

В GetAllCandidatesByDates (), возможно, у вас должно быть:

FORM_SUBMISSION_DATE + "BETWEEN @initialDate AND @finalDate"

А затем привязать initialDate к параметру "@initialDate" и finalDate к параметру "@finalDate"?То, как вы это делаете сейчас, вы не используете параметры для этих дат, а вместо этого конвертируете конкретные значения DateTime в строки и объединяете эти строки непосредственно в ваш окончательный SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...