System.Data.dll中出现未处理的“System.Data.OleDb.OleDbException”类型异常
附加信息:无法使用'';文件已在使用中 这是错误指向的地方:
da.Fill(dt);
数据库位于我计算机上的C:\ChattBankMDB.mdb
。
数据库:http://puu.sh/hjQj0/d86ede4c00.png
当我按下button1时,我希望表单跟进并登录Customer数据库,否则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");
}
}
}
答案 0 :(得分: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
或其他图书馆的盐/哈希方法。
然后更改连接可以缓解您的问题。
我认为您的下一个问题源自构建数据表之前的Fill
。
答案 1 :(得分:0)
数据库是一个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);