C# 从Access MDB获取数据行并显示在文本框中
我有一个access数据库(mdb)。其中有ID、Name、Email ID列。我有文本框来显示结果,比如ID\u textbox、Name\u textbox、EmaiId\u textbox。我有一个文本框和一个名为“查找”的按钮 我想要的是当我在文本框中输入一个值并单击“查找”按钮时。它应该在ID列中搜索该值,获得该行的名称和电子邮件的结果,并在那里的文本框中显示 谢谢你的帮助。谢谢 我已经在谷歌上搜索过了,这不是一个重复的问题。我在谷歌上找不到答案,所以我提出了一个问题。请帮帮我 我试过一些密码C# 从Access MDB获取数据行并显示在文本框中,c#,.net,winforms,ms-access,C#,.net,Winforms,Ms Access,我有一个access数据库(mdb)。其中有ID、Name、Email ID列。我有文本框来显示结果,比如ID\u textbox、Name\u textbox、EmaiId\u textbox。我有一个文本框和一个名为“查找”的按钮 我想要的是当我在文本框中输入一个值并单击“查找”按钮时。它应该在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();
}
我发现了问题。以上是公共功能,不会改变tb值。如何解决这个问题互联网上有很多答案,大量的入门视频也展示了如何解决这个问题。无论如何,您可以使用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();
}
您正在搜索字符串值,其尾部空格可能会影响结果以及大小写。如果没有找到任何东西:
将IF语句更改为While,它将起作用
while (dr.Read())
{
email_tb.Text = dr.GetString(0);
}
对不起,伙计,我不明白答案什么是db,是datatable还是dataset。我已经定义了一个数据表(dt)。嘿,为你重播thx。。我发现这个问题。。。我在一个公共函数中使用它。它并没有改变tb的文本。如何修复它。我不能将其设置为私有,因为我正在从另一个窗体调用此函数。对不起,我不明白你的意思。如果您的意思是您使用的地方没有访问UI的权限,那么使用该方法仅返回行数据。除了SQL注入漏洞和资源的不当处理之外,此代码看起来还可以。它在干什么?它是否出错?它不会在文本框中显示文本。什么也没发生……没有用的同时也不工作。但是如果我使用这个cmd
dtcmd.ExecuteNonQuery()代码>在底部显示错误<代码>System.Data.dll中发生类型为“System.InvalidOperationException”的未处理异常。其他信息:已存在与此命令关联的打开的DataReader,必须首先关闭。
If(dr.Read())是If(dr.HasRows){If(dr.Read(){}}的快捷方式,如果使用而(dr.Read()){email_tb.Text=dr[“EmailId”].ToString();}
然后,如果你有10条记录,你会在你的文本框中看到最后一条记录的结果。也要避免这样写查询。使用参数化查询来防止SQL注入攻击。离题但正如我在另一篇文章中所说,不要只发布代码答案。也许你不是英语母语,但不要担心。这里的大多数人您不是以英语为母语的人。只需在您的问题中添加一些简单的描述,就足以向其他用户展示您的答案可能有用的原因。if(表达式)和while(表达式)。为什么您认为如果将if()转换为while(),它会起作用?为什么if(false)与while(false)不同?或者如果(true)与while不同(true)while循环何时应仅执行一次?是,如果仅执行一次,则无差异。
while (dr.Read())
{
email_tb.Text = dr.GetString(0);
}