Как я могу отфильтровать записи, возвращаемые вызовом хранимой процедуры? - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь использовать хранимую процедуру для поиска пользователей в моем приложении WinFomrs. У меня есть этот код:

Regex regPattern = new Regex(searchTextBox.Text);
dataGridView1.DataSource = users.GetAllUsers()
                            .Where<users>(item => regPattern.IsMatch(item.FirstName))
                            .ToList<users>();`

Но это не работает, потому что у моего GetAllUsers в моем DAL нет оператора where, потому что я использовал хранимую процедуру вместо обычного оператора SQL, так как я могу это исправить, ребята?

Вот мой БАЛ:

public List<GetAllUsers> GetAllUsers()
{
    List<GetAllUsers> UserDatails = new List<GetAllUsers>();
    try
    {
        CacheConnection.ClearParameters();
        dataTable = CacheConnection.GetDataTable("AGSP.Users_GetAllUsers2");
        if (dataTable.Rows.Count != 0)
        {
            foreach (DataRow r in dataTable.Rows)
            {
                GetAllUsers oBo = new GetAllUsers();
                Type myType = typeof(GetAllUsers);
                System.Reflection.PropertyInfo[] properties = myType.GetProperties();
                foreach (System.Reflection.PropertyInfo p in properties)
                {
                    if (dataTable.Columns.Contains(p.Name))
                    {
                        if (ReferenceEquals(r[p.Name], DBNull.Value))
                        {
                            if (p.PropertyType.ToString() == "System.DateTime")
                            {
                                p.SetValue(oBo, DateTime.Now, null);
                            }
                            else if (p.PropertyType.ToString() == "System.String")
                            {
                                p.SetValue(oBo, "", null);
                            }
                        }
                        else
                        {
                            p.SetValue(oBo, r[p.Name], null);
                        }
                    }
                }
                UserDatails.Add(oBo);
            }
            return UserDatails;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return UserDatails;
}

Кстати, я не использую SQL, я использую язык программирования Caché для своей базы данных, но в нем также есть хранимая процедура.

Я исправил это, ребята

что я сделал в моей кнопке поиска, это

Regex regPattern = new Regex(searchTextBox.Text);
        lstUsers.DataSource = users.GetAllUsersByUsername(searchTextBox.Text);

вместо этого

Regex regPattern = new Regex(searchTextBox.Text);
dataGridView1.DataSource = users.GetAllUsers()
                            .Where<users>(item => regPattern.IsMatch(item.FirstName))
                            .ToList<users>();`

А также

это то, что я сделал в моем DAL

public List<GetAllUsers> GetAllUsersByUsername(string username) 
    {
        List<GetAllUsers> UserDatails = new List<GetAllUsers>();
        try
        {
            CacheConnection.ClearParameters();
            CacheConnection.AddParameter("UserName", username);

1 Ответ

0 голосов
/ 29 июня 2018

Вместо этого вы можете передать значение поиска в хранимую процедуру, а затем вместо того, чтобы возвращать всех пользователей из запроса, использовать оператор типа «% Search Term%» в операторе where, который возвращает результаты.

или вы можете поместить фильтр строк в таблицу данных, чтобы фильтровать результаты таким образом. Перед тем, как ввести свой цикл for.

На этой странице есть хорошее описание фильтрации https://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter(v=vs.110).aspx введите описание ссылки здесь

это хороший пример поиска: http://www.csharp -examples.net / DataView-RowFilter /

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