-2

我正在尝试使用存储过程在我的 WinFomrs 应用程序中搜索用户。我有这个代码:

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

但这不起作用,因为我GetAllUsers的 DAL 中没有where语句,因为我使用了存储过程而不是常规 SQL 语句,所以我该如何解决这个问题,伙计们?

这是我的 BAL:

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);
4

1 回答 1

1

您可以将搜索值传递给存储过程,而不是从查询中返回所有用户,而是在返回结果的 where 语句中使用类似“%Search Term%”的语句。

或者你可以在数据表上放置一个行过滤器来过滤结果。在你进入你的 for 循环之前。

此页面对过滤有很好的描述 https://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter(v=vs.110).aspx在此处输入链接描述

这有很好的搜索示例: http ://www.csharp-examples.net/dataview-rowfilter/

于 2018-06-29T08:12:08.240 回答