【问题标题】:How to Retrieve data from MS access db to windows forms? [duplicate]如何从 MS access db 中检索数据到 windows 窗体? [复制]
【发布时间】:2022-02-15 15:36:03
【问题描述】:

我制作了一个简单的登录程序,它使用一个存储用户名和密码的访问数据库。这是打开第二个表单的登录按钮的代码:

private void btnlogin_Click(object sender, EventArgs e)
    {
        con.Open();
        string login = "SELECT * FROM tbluser WHERE username= '" + txtusername.Text + "' and password= '" + txtpassword.Text + "'";
        cmd = new OleDbCommand(login,con);
        OleDbDataReader dr = cmd.ExecuteReader();

        if (dr.Read() == true)
        {
            new Form3().Show();
            this.Close();
        }
        else
        {
            MessageBox.Show("Invalid Username or Password", "Login failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
            txtpassword.Text = "";
            txtusername.Text = "";
        }
    }

Form3 没有代码,它是一个空白表单。如何在空白表单上显示登录用户的名称?我需要一个具有指向用户 ID 的外键的单独表吗?如果是这样,我将如何将其编码到程序中?

谢谢

【问题讨论】:

  • “访问存储用户名和密码的数据库” - 停在那里。不要再进一步了。不要存储明文密码。
  • 使用parametrized query。另外不要忘记关闭和dispose the connection,当您不再需要它时,您可以通过 using 语句轻松完成。
  • @Fildor 这个程序只适合我,我知道你可以加密或密码保护访问数据库。这是我用数据库制作的第一个程序,我相信你可以说出来。
  • 我不在乎这是你的第一个还是 1000 个......只要拿走你永远,永远,永远不会存储纯文本密码。甚至没有“加密”的。如果你想学习如何做到这一点,有很多讲座。即使是“有趣的项目”也不要这样做。
  • ^^ “如何做到这一点”的意思是“如何安全地处理密码”。如果您在有趣的“只为我的项目”中需要用户 - 为什么他们首先需要密码?如果您记住他们的名字,最好让他们登录,而不是实施完全不安全的密码机制。你会习惯这一点。迟早,您将使用与您的实际密码相似的密码......你看,我要去哪里,对吧?

标签: c# winforms ms-access


【解决方案1】:

您需要一个 oledb 提供程序才能访问。当前是Ace,并在redistributable 中提供或与Office 捆绑在一起。请记住,您需要 x86 或 x64 版本,具体取决于您的程序。

很遗憾,我手头没有任何使用示例,所以我会参考文档来准确了解您应该如何使用它。

也就是说,我建议使用 Access 的唯一用例是从中获取旧数据以转换为其他格式。我花了很多时间处理各种崩溃和 Access 的其他问题。 SqlLite 似乎是一种流行的进程内替代方案。而 Postgres 或 MsSQL Express 将是常见的经典数据库。对于非常简单的数据,仅使用普通文件可能就足够了。如果您是数据库新手,这会翻倍,学习如何使用真正的数据库比解决各种 Access 问题要好得多。如果您需要一些介绍,请查找有关 EntityFramework 的文章。

如 cmets 所述,切勿以明文形式存储密码,使用proper password storage 技术。如果这个项目是为了学习,你应该从一开始就学习正确的方法。如果只是供个人使用,则不需要任何密码或其他用户。

【讨论】:

  • 提供者信息不正确。 Jet.OleDb 和 ACE.OLEDB 是两个不同的驱动程序,前者没有 64 位版本。后者可以在所有场景中替代前者,包括旧的.mdb 数据库、CSV 文件、Excel Sheets pre 或 post Office 2007 等。
  • @Jimi 谢谢,已经有一段时间了,所以我把它们弄混了。
  • “我建议使用 Access 的唯一用例是从中获取旧数据以转换为其他格式” - 起立鼓掌,在这里!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多