登录后我试图获取字段的值(用户访问级别为字符串格式的1或2)
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dsms.accdb");
connection.Open();
OleDbDataReader reader = null;
OleDbCommand command = new OleDbCommand("SELECT AL From Users WHERE Username='" + textusername.text + "'", connection);
reader = command.ExecuteReader();
if( reader.HasRows)
{
MessageBox.Show("success","status");
label1.Text = reader.GetString(1);
}
else
MessageBox.Show("failur", "status");
connection.Close();
我确实在Access中执行了代码,这完全没问题但是在程序中,它说“行/列没有数据”
代码中的主要问题是,您需要调用reader.Read()才能从DataReader中获取任何内容。仅调用HasRows并不会使读者位于查询的第一条记录上。
您的代码中还有其他问题。应该在using语句中创建诸如连接,命令和读取器之类的一次性对象,以确保使用后正确处置,并且由于查询中只有一个字段,因此应使用索引0来检索它,而不是1
using(OleDbConnection connection = new OleDbConnection(.....))
using(OleDbCommand command = new OleDbCommand("SELECT AL From Users WHERE Username=@name", connection);
{
connection.Open();
using(OleDbDataReader reader = command.ExecuteReader())
{
if( reader.Read())
{
MessageBox.Show("success","status");
label1.Text = reader.GetString(0);
}
else
MessageBox.Show("failur", "status");
}
}
connection.Close();