2011-06-05 40 views
2
private void Filtriraj() 
    { 
     string filter = string.Empty; 
     if (txtID.Text.Length > 0) 
     { 
      filter = "ID LIKE '%" + txtID.Text + "%'"; 
     } 
     if (txtName.Text.Length > 0) 
     { 
      filter = "Name LIKE '%" + txtName.Text + "%'"; 
     } 
    } 

我想在我的c#应用程序中通过ms访问数据库表进行搜索。上面的一个连接到“Table1”,它具有一些字段,如ID,姓名,地址... ID类型设置为自动编号,其他都是文本。我能够搜索除ID以外的所有领域,这种方式以上不会工作,我得到例外,当我尝试通过ID搜索(我键入txtbox中的一些身份证号码,在分贝,exmp:'1') 搜索txtName工作正常。c#搜索ms按ID访问db

回答

5

自动编号是某种形式的编号(我认为长),因此您不能使用LIKE关键字。您必须搜索完全匹配(或大于,小于等)。你也不能用单引号包围数字,所以需要删除这些数字。

我想你的代码切换到这样的事情:

. 
. 
. 
if (txtID.Text.Length > 0) 
{ 
    int id; 
    if (Int32.TryParse(txtID.Text, out id)) 
    { 
     filter = "ID = " + id.ToString(); 
    } 
} 
. 
. 
. 

另外,你的代码看起来一样,如果你拥有一个充满数据的多个文本框(因为你不使用否则,如果它不能正常工作)。无论您最后检查哪个文本框,都将最终成为使用的过滤器,因为您每次都重新指定过滤器变量。如果您直接从文本框中使用过滤器文本,那么您可以打开自己的文档,并可能会出现SQL Injection。你应该看看使用parameterized queries

+0

好吧,我仍然无法找到完全匹配的搜索 – djuvec12 2011-06-05 12:10:44

+0

@ djuvec12:我添加了一个例子。 TryParse是为了确保ID文本框实际上包含一个数字。否则,当用户输入类似ABC的内容时,如果您尝试搜索ID字段,则会发生错误。 – 2011-06-05 12:12:40

+0

现在,它的作品,非常感谢你的帮助! – djuvec12 2011-06-05 12:16:21