如何过滤存储过程调用返回的记录?

时间:2018-06-29 07:33:08

标签: c# winforms stored-procedures intersystems-cache-studio

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

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

但是它不起作用,因为我的DAL中的GetAllUsers没有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);

1 个答案:

答案 0 :(得分:1)

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

或者您可以在数据表上放置一个行过滤器,以这种方式过滤结果。在进入for循环之前。

此页面对过滤有很好的描述 https://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter(v=vs.110).aspx enter link description here

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