Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net从文本框搜索数据库,输入特定字符串时除外_C#_Asp.net_Database_Lotus - Fatal编程技术网

C# Asp.net从文本框搜索数据库,输入特定字符串时除外

C# Asp.net从文本框搜索数据库,输入特定字符串时除外,c#,asp.net,database,lotus,C#,Asp.net,Database,Lotus,我创建了一个asp.net应用程序,用户可以在文本框中输入名称来搜索lotus notes数据库。无论何时输入一个名字,比如说“Robert”,隐藏的代码都会搜索数据库,并在gridview中显示所有结果(所有条目都称为“Robert”) 问题是我的数据库大约有17万多个条目。因此,同时加载它们是不可能的。加载页面需要很长时间,然后浏览器才会超时 所以我用一种简单的方法解决了这个问题。我对我的应用程序进行了编码,这样当它已经加载了2000个条目时,它就会停止加载条目。这样,页面的显示速度要快得多

我创建了一个asp.net应用程序,用户可以在文本框中输入名称来搜索lotus notes数据库。无论何时输入一个名字,比如说“Robert”,隐藏的代码都会搜索数据库,并在gridview中显示所有结果(所有条目都称为“Robert”)

问题是我的数据库大约有17万多个条目。因此,同时加载它们是不可能的。加载页面需要很长时间,然后浏览器才会超时

所以我用一种简单的方法解决了这个问题。我对我的应用程序进行了编码,这样当它已经加载了2000个条目时,它就会停止加载条目。这样,页面的显示速度要快得多

但是,如果我在文本框中键入“Robert”,然后单击ok按钮,则不会显示任何条目。因为应用程序不会遍历数据库中超过2000个条目

所以我想了个办法。每当用户在文本框中输入“[2000]”时,页面将再次加载,但这次它将在“[](即2000)之间指定的索引之后开始加载条目。这样,我们就能够访问远远超过2000年上限的条目,而不会影响页面显示时间

但有一个问题。每当我在文本框中输入“[2000]”,应用程序就会在数据库中搜索名为“[2000]”的条目。有没有办法在研究中加入例外情况?比如当我输入一个特定的字符串时,它会处理不同的代码,而不是在数据库中查找该文本

我现在没有任何代码可以给你,因为我在家写这篇文章,代码在我的办公室。如果你真的需要一些代码,我明天会看看我能做些什么。但是如果有人能给我提供一个代码示例,我会非常感激

谢谢

使用
和web服务将数据加载到页面init本身

以下是一个例子:

<asp:TextBox ID="txt1" MaxLength="80" class="form-control"  runat="server"></asp:TextBox>

<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txt1" ServiceMethod="returntxt1Data"
MinimumPrefixLength="1" CompletionInterval="0" EnableCaching="false" OnClientItemSelected="ItemSelected">
</ajaxToolkit:AutoCompleteExtender>
然后创建一个Web服务来相应地显示自动完成

[System.Web.Services.WebMethod]
        public static List<string> returntxt1Data(string prefixText)
        {
            List<string> newlist1 = new List<string>();

            foreach (string a in List1)
            {
                if (a.ToUpper().Contains(prefixText.ToUpper()))
                {
                    newlist1.Add(a);
                }
            }
            return newlist1;
        }
[System.Web.Services.WebMethod]
公共静态列表返回TXT1DATA(字符串前缀EXTEXT)
{
List newlist1=新列表();
foreach(列表1中的字符串a)
{
如果(a.ToUpper().Contains(prefixText.ToUpper()))
{
新列表1.添加(a);
}
}
返回newlist1;
}

您的逻辑也很麻烦您的代码。要使用关键字搜索数据库,您应该执行以下操作。 我以前没有使用过LotusNote,所以一般的算法是

  • 使用“WHERE Name LIKE%keyword%”语句搜索短关键字
  • 当你的关键词是一个句子,比如一篇文章的标题等,使用全文搜索
  • 请始终在sqlserver中使用“TOP{pagesize}”,或在mysql中使用“LIMIT{pagesize}”。这将限制要返回的记录数,然后添加分页,以便在有更多数据匹配时继续搜索。(LotusNote中应该有一个类似的版本)
  • 确保文本框不为空,以避免对数据库进行不必要的调用
  • 试试看

    public static List<string> List1= new List<string>(); 
    
    protected void Page_Init(object sender, EventArgs e)
    {
        List1= LoadData(); //one time load data from database.
    }
    
    [System.Web.Services.WebMethod]
            public static List<string> returntxt1Data(string prefixText)
            {
                List<string> newlist1 = new List<string>();
    
                foreach (string a in List1)
                {
                    if (a.ToUpper().Contains(prefixText.ToUpper()))
                    {
                        newlist1.Add(a);
                    }
                }
                return newlist1;
            }