SQL всегда возвращает одинаковые результаты - PullRequest
0 голосов
/ 31 марта 2012

Я пытаюсь выполнить поиск в таблице в моей базе данных, где он возвращает первые 50 строк с именем, таким как поисковый термин, переданный в функцию, но он всегда возвращает те же 50 результатов

Мой sql выглядит следующим образом:

Select TOP(50) * 
FROM [database].[dbo].[records] 
WHERE (A_1STNAME LIKE '" + @searchTerm + "%') 
ORDER BY A_RECID

Когда я запускаю этот запрос в окне запросов Visual Studios, он работает как положено, но когда я запускаю его через приложение ASP.NET, он всегда возвращает те же 50 результатов.и только у одного из них есть имя, близкое к searchTerm, который я ему передал.

вот код страницы, который выполняет функцию:

protected void Page_Load(object sender, EventArgs e)
{

        _migrated_data data = new _migrated_data();
        DataSet ds = data.Search(Request.QueryString.Get("query"), "A_RECID", 50);
        if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
        {
            rpt_Data.DataSource = ds.Tables[0].DefaultView;
            rpt_Data.DataBind();
        }

}

и вот метод поискаиз _migrated_data:

public DataSet Search(String @pSearchTerm, String @pSortBy, int @pRowCount)
{
    DataSet ds = new DataSet();
    OleDbConnection objOleDBConn;
    OleDbDataAdapter objOleDBDa;
    objOleDBConn = new OleDbConnection(ClearingHouse_OLEDDB);
    objOleDBConn.Open();
    string lSQL = "SELECT TOP(50) * FROM [database].[dbo].[records]";
    lSQL += " WHERE (A_1STNAME LIKE @searchTerm ) ORDER BY @sortBy";
    SqlCommand t = new SqlCommand(lSQL);

    if (pSearchTerm != null && pSearchTerm != "")
    {
        t.Parameters.AddWithValue("@searchTerm", @pSearchTerm + "%");
    }

    if (pSortBy != null && pSortBy != "")
    {
        t.Parameters.AddWithValue("@sortBy", @pSortBy);
    }
    else
    {
        t.Parameters.AddWithValue("@sortBy", "A_RECID");
    }
    objOleDBDa = new OleDbDataAdapter(t.CommandText, objOleDBConn);
    objOleDBDa.SelectCommand.CommandType = CommandType.Text;
    objOleDBDa.Fill(ds);
    objOleDBConn.Close();
    return ds;
}

Используя локальные ресурсы для просмотра окончательного CommandText из t, я получаю результаты sql, которые я дал выше.

Любая помощь очень ценится :)

Ответы [ 3 ]

0 голосов
/ 31 марта 2012

Похоже, ваш параметр неправильно передается на уровень данных. Самый простой способ выяснить, так ли это, - включить Sql Profiler и проверить, передается ли он. Если это так, то ваш sql виноват. Если это не так, это ваше приложение. Затем вы можете использовать отладчик в своем приложении, чтобы пробираться вверх по стеку и видеть, в чем проблема.

0 голосов
/ 31 марта 2012

Как сказал Роб Роди, прежде всего, чтобы получить результаты, начиная со значения, которое вам понадобится % char в конце терм:

Select TOP(50) * 
FROM [database].[dbo].[records] 
WHERE (A_1STNAME LIKE '" + @searchTerm + "%') 
ORDER BY A_RECID

Во-вторых, вероятно, ваш searchTermпусто, поэтому он всегда получает одинаковые результаты.

Отладка приложения и просмотр переменной, чтобы узнать, получает ли она какое-либо значение.

0 голосов
/ 31 марта 2012

У вас там SQL-инъекция. Кроме того, похоже, что% -знаки отсутствуют.

Тот факт, что запрос работает в окне запроса, а не в вашем приложении, означает, что ошибка не в вашем запросе! Вы думали об этом? Возможно, вам следует опубликовать код вашего приложения ASP.NET.

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