c#按ID搜索ms访问数据库

时间:2011-06-05 11:33:11

标签: c# ms-access search

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#app中通过ms访问数据库表进行搜索。上面的一个连接到“Table1”,它有一些字段,如ID,名称,姓氏,地址...... ID类型设置为自动编号,所有其他字段设置为文本。我能够搜索除ID之外的所有字段,这种方式上面不会工作,当我尝试按ID搜索时我得到异常(我在txtbox中键入一些在db中的ID号,exmp:'1') 通过txtName搜索工作正常。

1 个答案:

答案 0 :(得分:5)

自动编号是某种形式的数字(我认为很长)所以你不能使用LIKE关键字。您必须搜索完全匹配(或者更好,小于等)。您也无法用单引号括起数字,因此需要将其删除。

我会将您的代码切换为以下内容:

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

此外,如果您有多个填充数据的文本框(因为您没有使用其他文件),您的代码看起来可能无法正常工作。无论你最后检查什么文本框最终将成为使用的过滤器,因为你每次都要重新分配过滤器变量。如果您直接在文本框中使用过滤器文本,那么您可以自己打开SQL Injection。您应该考虑使用parameterized queries