C# 将用户从Access读取到列表中只返回一个用户
我正在用VS2010SP1开发C中的WPF应用程序 我在这里和网上的其他地方看了很多例子,我的代码似乎是正确的,但是当我试图将Access DB中的行读入一个类,然后读入一个ObservableCollection时,我也只尝试了一个列表,在集合中只有一个。然后,我尝试在列表框中显示用户名列表,当然,只会显示集合中的一个用户 我已经在这上面呆了一段时间了。任何帮助都将不胜感激。我希望这是一件非常琐碎的事情,我只是忽略了 用户类别:C# 将用户从Access读取到列表中只返回一个用户,c#,wpf,list,ms-access,oledbdatareader,C#,Wpf,List,Ms Access,Oledbdatareader,我正在用VS2010SP1开发C中的WPF应用程序 我在这里和网上的其他地方看了很多例子,我的代码似乎是正确的,但是当我试图将Access DB中的行读入一个类,然后读入一个ObservableCollection时,我也只尝试了一个列表,在集合中只有一个。然后,我尝试在列表框中显示用户名列表,当然,只会显示集合中的一个用户 我已经在这上面呆了一段时间了。任何帮助都将不胜感激。我希望这是一件非常琐碎的事情,我只是忽略了 用户类别: public class User { public U
public class User
{
public User() { }
public int UserID { get; set; }
public string UserName { get; set; }
public string UserTitle { get; set; }
public string UserArea { get; set; }
}
代码:
当我以类似的方式处理数据库连接时,也发生了类似的事情 请尝试以下代码:
// Setting up DB stuff.
string s_ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data " +
"Source=|DataDirectory|\\CloseoutApp.accdb";
string s_Query = "SELECT UserID, UserName, UserTitle, UserArea FROM Users " +
"ORDER BY UserID;";
ObservableCollection<User> userList = new ObservableCollection<User>();
using (OleDbConnection AccessConn = new OleDbConnection(s_ConnString))
{
using (OleDbCommand AccessCmd = AccessConn.CreateCommand())
{
AccessCmd.CommandText = s_Query;
try
{
AccessConn.Open();
OleDbDataReader rdr = AccessCmd.ExecuteReader();
while (rdr.Read())
{
User newUser = new User();
newUser.UserID = rdr.GetInt32(0);
newUser.UserName = rdr.GetValue(1).ToString();
newUser.UserTitle = rdr.GetValue(2).ToString();
newUser.UserArea = rdr.GetValue(3).ToString();
userList.Add(newUser);
}
rdr.Close();
}
catch(Exception ex)
{
//do something with ex
}
}
}
// Add users to the ListBox.
foreach (User u in userList)
{
lb_Users.Items.Add(u.UserName);
}
尝试了一下,得到了同样的精确结果。通过调试也确认userList只有一个条目。@Ashton我在while循环中做了一个调整。针对这些空值尝试一下,看看在GetValue上调用ToString是否能更好地处理空值问题我假设表中有多个用户?我放弃了我的答案,因为它不能解决你的问题。如果需要添加其他内容,我会将其添加回调试器中,如果您在调试器中单步执行,是否看到rdr.Read第一次返回true,第二次返回false,即循环只执行一次?在catch块中是否捕获了任何异常?如果将try…catch移动到循环内部,根据//Update Statusbar的操作,不确定这是否有意义?请尝试直接在Access中运行SQL,以确保获得预期的结果。@DanNewhouse-是的,表中有三个测试用户。@Ashton Cool,我想应该是>1,但你永远不知道;
// Setting up DB stuff.
string s_ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data " +
"Source=|DataDirectory|\\CloseoutApp.accdb";
string s_Query = "SELECT UserID, UserName, UserTitle, UserArea FROM Users " +
"ORDER BY UserID;";
ObservableCollection<User> userList = new ObservableCollection<User>();
using (OleDbConnection AccessConn = new OleDbConnection(s_ConnString))
{
using (OleDbCommand AccessCmd = AccessConn.CreateCommand())
{
AccessCmd.CommandText = s_Query;
try
{
AccessConn.Open();
OleDbDataReader rdr = AccessCmd.ExecuteReader();
while (rdr.Read())
{
User newUser = new User();
newUser.UserID = rdr.GetInt32(0);
newUser.UserName = rdr.GetValue(1).ToString();
newUser.UserTitle = rdr.GetValue(2).ToString();
newUser.UserArea = rdr.GetValue(3).ToString();
userList.Add(newUser);
}
rdr.Close();
}
catch(Exception ex)
{
//do something with ex
}
}
}
// Add users to the ListBox.
foreach (User u in userList)
{
lb_Users.Items.Add(u.UserName);
}