查找数据集中的数据

时间:2013-11-14 13:34:38

标签: database ms-access dataset buttonclick

我用谷歌搜索了一些有用的网站,这些网站帮助了我,但不确定到底出了什么问题。我的数据库中包含数据。我可以在页面加载上显示数据,我可以使用下一个和上一个按钮对数据进行排序,但问题是我的查找按钮不起作用,并且在搜索名称时始终显示“找不到行”消息。我确信有一种更有效的方法可以做到这一点,但还没有看到它。

由于

这是我的代码:

string searchFor = txtSearch.Text.Trim();
    int results = 0;

    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\AddressBook.mdb");

    conn.Open();
    DataSet ds = new DataSet();
    string cmd = "SELECT * FROM tblAddressBook";

    OleDbDataAdapter da = new OleDbDataAdapter(cmd, conn);
    da.Fill(ds, "Info");

    DataRow[] returedRows;
    DataRow dr;
    returedRows = ds.Tables.Select("LastName=' " + searchFor + " ' ");
    results = returedRows.Length;

    if (results > 0)
    {   
        dr = returedRows[0];
        txtFirstName.Text = dr["FirstName"].ToString();
        txtLastName.Text = dr["LastName"].ToString();
        txtEmail.Text = dr["Email"].ToString();
        txtPhone.Text = dr["PhoneNumber"].ToString();
    }
    else
    {
        lblReturned.Text = "No Rows Found";
    }

    //close the connection
    conn.Close();

1 个答案:

答案 0 :(得分:1)

您的.Select字符串正在为搜索字词的开头和结尾添加空格。如果searchFor包含Thompson,那么您的陈述将是

.Select("LastName=' Thompson ' ")

所以没有条目匹配,除非他们有一个领先的空间。另外,我不知道ds.tblAddressBook与任何事情有什么关系,所以我只是用它来代替:

returedRows = ds.Tables["Info"].Select("LastName='" + searchFor + "'");

现在你需要调整你的代码,这样当有人试图搜索O'Connor时它就不会爆炸。