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搜索工作正常。
答案 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。