从Access MDB获取数据行并显示在文本框中
本文关键字:显示 文本 Access MDB 获取 数据 | 更新日期: 2023-09-27 18:04:09
我有一个访问数据库(mdb)。它有列ID,名称,电子邮件ID。我有显示结果的文本框,比如ID_textbox, Name_textbox, EmaiId_textbox。我有一个文本框和一个名为find的按钮。
我想要的是当我在文本框中输入一个值,然后单击查找按钮。它应该在ID列中搜索值,并获得该行的姓名和电子邮件的结果,并将其显示在那里的文本框中。
感谢你的帮助。由于
我已经用谷歌搜索过了,这不是一个重复的问题。我在谷歌上找不到答案,所以我问了一个问题。请帮帮我。
我试了一些代码
public void fff(string recno)
{
myconn.ConnectionString = connestr;
OleDbDataAdapter adap = new OleDbDataAdapter();
dtcmd.Connection = myconn;
dtcmd.CommandText = "SELECT * FROM sample WHERE [id] = '" + recno + "'";
myconn.Open();
var dr = dtcmd.ExecuteReader();
dr.Read();
email_tb.Text = dr.GetString(2);
dr.Close();
dtcmd.ExecuteNonQuery();
myconn.Close();
}
我发现了问题。以上是公共函数,不改变其值。如何修复
dtcmd.Connection = myconn;
dtcmd.CommandText = "SELECT Name, EmailId FROM sample WHERE [id] = '" + find_tb.Text + "'";
if (myconn.State == ConnectionState.Closed)
{
myconn.Open();
}
OleDbDataReader dr = dtcmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
email_tb.Text = dr["EmailId"].ToString();
}
}
dr.Close();
myconn.Close();
将IF语句更改为While,它将工作
while (dr.Read())
{
email_tb.Text = dr.GetString(0);
}
互联网上有很多关于这个问题的答案,也有大量的入门视频展示了如何做到这一点。无论如何,您可以使用来自codeplex和Linq的IQToolkit,因此编写代码会更容易:
var data = db.TableName.SingleOrDefault( r => r.ID == ID_textbox );
if (data != null)
{
Name_textbox.Text = data.Name;
EmaiId_textbox.Text = data.Email;
}
这只是众多方法中的一种。
编辑:这是基于您后来添加的示例代码:
string path=@"c:'myFolder'MyDb.mdb";
using(OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+path))
{
var cmd = new OleDbCommand(@"SELECT Name, EmailId
FROM sample
WHERE [id] = @id";
cmd.Parameters.AddWithValue("@id", find_tb.Text.Trim());
con.Open();
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
email_tb.Text = (string)dr["EmailId"];
}
con.Close();
}
您正在搜索一个字符串值,其末尾的空格可能会影响结果,以及大小写。如果没有找到任何内容:
- 请确认不是大小写问题。
- 请确保您正在查找正确的mdb文件(访问是基于文件的,并且在项目中您正在查找的文件可能不是您认为的,除非您使用完整路径和文件名)。