Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Access MDB获取数据行并显示在文本框中_C#_.net_Winforms_Ms Access - Fatal编程技术网

C# 从Access MDB获取数据行并显示在文本框中

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列中搜索该值,获得该行的名称和电子邮件的结果,并在那里的文本框中显示 谢谢你的帮助。谢谢 我已经在谷歌上搜索过了,这不是一个重复的问题。我在谷歌上找不到答案,所以我提出了一个问题。请帮帮我 我试过

我有一个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();
}
您正在搜索字符串值,其尾部空格可能会影响结果以及大小写。如果没有找到任何东西:

  • 确保这不是套管问题
  • 确保查看的是正确的mdb文件(access是基于文件的,在项目中,您正在查看的文件可能不是您认为的文件,除非您使用完整路径和文件名)

  • 将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);
        }