【问题标题】:Connecting to the MDB Database C#连接到 MDB 数据库 C#
【发布时间】:2015-04-19 23:13:03
【问题描述】:

System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常

附加信息:无法使用'';文件已在使用 这是错误指向的地方:

da.Fill(dt);

数据库位于我电脑上的C:\ChattBankMDB.mdb

数据库:http://puu.sh/hjQj0/d86ede4c00.png

当我按下按钮 1 时,我希望表单跟进并登录客户数据库,否则 messagebox.show 会说登录失败。

表单上的按钮:

公共部分类 CustLogin : 表单 {

OleDbConnection db = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\ChattBankMDB.mdb");
OleDbDataAdapter da = new OleDbDataAdapter();
DataTable dt = new DataTable();
public CustLogin()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    da = new OleDbDataAdapter("Select CustID, CustPassword From Customers", db);
    da.Fill(dt);
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        if (UserText.Text == dt.Rows[i]["CustID"] && PassText.Text == dt.Rows[i]["CustPassword"])
        {
            WelcomeCust f = new WelcomeCust();
            this.Hide();
            f.Show();
        }
        else
        {

            MessageBox.Show("FAILURE TRY AGAIN");
        }
    }
}

【问题讨论】:

  • 你应该发布异常的整个堆栈跟踪
  • 不要以纯文本形式存储密码
  • 你有一个 SQL 注入漏洞。
  • @RodrigoJuarez:这根本没有帮助。
  • MDB 不是 SQL Server。你需要 OleDb。

标签: c# database ms-access


【解决方案1】:

我注意到了几个潜在的问题:

  • 数据库注入。
  • 纯文本密码。
  • 使用SqlConnection

.mdb 不是 SQL 数据库,它实际上是 Microsoft Access 数据库。所以你会想要实际使用ADO.NET 连接。所以你的代码实际上应该是:

private readonly string dbConnection = ConfigurationManager.ConnectionStrings["..."].ConnectionString;
private const string query = "SELECT * FROM [Example] WHERE ([Id] = @Id);";

public void Example()
{
     using(var connection = new OleDbConnection(dbConnection))
         using(var command = new OleDbCommand(query, connection))
         {
              // Apply parameter, open connection, etc.
         }
}

您使用参数来避免引入子查询。至于您的纯文本密码,您应该查看BCrypt 或其他用于 Salt / Hash 方法的库。

那么对连接的更改应该可以缓解您的问题。

我认为您的下一个问题源于Fill 在您构建数据表之前。

【讨论】:

    【解决方案2】:

    数据库是一个 Acces 数据库,所以需要使用 OleDB 连接。

    此外,查询可能会导致错误。

    替换:

    ("Select* from Customers where CustID ='" + UserText.Text +"'
    and CustPassword =" + PassText.Text + '"', conn)
    

    作者:

    ("Select * from Customers where CustID = '" + UserText.Text + "' 
    and CustPassword = '" + PassText.Text + "'", conn);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多