0

我试图通过基于特定电子邮件选择记录来在我的 Windows 窗体上显示数据库内容。

我正在使用以下代码,但它没有检索它

private void editrecordbutton_Click(object sender, EventArgs e)
{
    MyOleDbConnection.Open();
    string query = string.Format("select Email from login where Email='{0}'", editrecordtextBox.Text);
    OleDbCommand vcom1 = new OleDbCommand(query, MyOleDbConnection.vcon);
    OleDbDataReader reader = vcom1.ExecuteReader();
    //int check = vcom1.ExecuteNonQuery();
    string email = (string)reader["Email"];
    if (email == editrecordtextBox.Text)
    {
        if (editrecordtextBox.Text != string.Empty)
        {
            EmailReturn = editrecordtextBox.Text;
            FinalEdit er = new FinalEdit();
            this.Close();
            er.Show();
            MyOleDbConnection.Close();
        }
        else
        {
            MessageBox.Show("No record selected");
        }
    }
    else
    {
        MessageBox.Show("Invalid Email-Id");
    }
    MyOleDbConnection.Close();
}

请帮助我了解它有什么问题,以及我是否以正确的方式看待这种方法。

4

1 回答 1

3

OleDbDataReader一个方法ReadRead只要有可用数据,就会返回 true。

通常你会像这样使用它:

while(reader.Read())
{
    // work with the current row of data    
}

由于您从不调用Read,因此您不会检索任何数据。您需要至少调用一次 Read 以将其移至查询返回的第一行数据。

您的代码的另一个重要问题与SQL 注入有关。您正在手动创建非常危险的查询字符串。您确实需要切换到参数化查询。这是一篇很好的博客文章,解释了如何使用它们:给我参数化 SQL,或者给我死

于 2013-04-12T10:42:38.777 回答