在Access中查找特定记录并将记录显示到文本框中

时间:2015-02-28 20:07:00

标签: c#

嘿,我是stacoverflow的新手,想问一些帮助。我需要在文本框中键入ID,当单击搜索时,它将找到记录并将每个列值显示到文本框。我正在使用访问数据库。我找到了解决方案,但他们似乎没有工作。我找到并调整了以下代码但是给出了错误操作conn.open()并用C#编码。请帮帮我。

源代码:

public partial class FamilyTree : UserControl
{
    private OleDbConnection conn;

    public FamilyTree()
    {
        InitializeComponent();
    }

    private void FamilyTree_Load(object sender, System.EventArgs e)
    {

    }

    private void ConnectToDatabase()
    {
        conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Hannes\Documents\Visual Studio 2013\Projects\fam\fam\Prog.mdb");
        conn.Open();
    }

    private void DisconnectDatabase()
    {
        conn.Close();
    }

    private void btnSearch_Click(object sender, System.EventArgs e)
    {
        string title = txtID.Text.ToString();
        string queryString = "SELECT * FROM FamilyTree" + txtID ;
        OleDbCommand command = new OleDbCommand();
        command.CommandText = queryString;
        command.Connection = conn;
        conn.Open();
        OleDbDataReader dr = command.ExecuteReader();
        while (dr.Read())
        {
            txtSex.Text += dr["gendre"].ToString();
            txtColour.Text += dr["name"].ToString();
            txtDOB.Text += dr["DOB"].ToString();
            txtStatus.Text += dr["city"].ToString();
            txtCock.Text += dr["mom"].ToString();
            txtHen.Text += dr["dad"].ToString();
        }
        conn.Close();
    }

1 个答案:

答案 0 :(得分:0)

确保在btnSearch_Click中使用'conn'之前在某处调用'ConnectToDatabase()'方法。

接下来,确定您是使用Id还是Title来过滤结果。

创建queryString时,请确保使用'WHERE Id ='或'WHERE Title ='子句进行过滤 - 但也要确保在queryString的末尾和末尾添加的值之间有一个空格 - 如果Id为23,您给出的示例将生成'SELECT * FROM FamilyTree23'。这会出错,因为数据库中没有此名称的表。

最后,正如其他答案中所提到的,“使用”数据库连接,并使用查询参数是一种更好的做法。 'using'语句将在使用后自动释放连接,参数化查询将阻止SQL注入问题,并确保将正确的数据类型传递给查询。

示例:

public partial class FamilyTree : UserControl
{
    string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Hannes\Documents\Visual Studio 2013\Projects\fam\fam\Prog.mdb";

    public FamilyTree()
    {
        InitializeComponent();
    }

    private void FamilyTree_Load(object sender, System.EventArgs e)
    {

    }

    private void btnSearch_Click(object sender, System.EventArgs e)
    {
        string title = txtID.Text.ToString();
        sqlQuery = "SELECT * FROM FamilyTree WHERE Title = ?";
        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("Title", title);
                conn.Open();
                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    txtSex.Text += dr["gendre"].ToString();
                    txtColour.Text += dr["name"].ToString();
                    txtDOB.Text += dr["DOB"].ToString();
                    txtStatus.Text += dr["city"].ToString();
                    txtCock.Text += dr["mom"].ToString();
                    txtHen.Text += dr["dad"].ToString();
                }
            }
        }
    }
}