SQLite数据库用户名列表无法在ListBox显示问题求助
修复ListBox不显示SQLite用户名列表的问题
嘿,我帮你找出几个导致ListBox没内容的核心问题,咱们一个个来解决:
事件绑定完全错了:你把加载数据的代码放在了
SelectedIndexChanged事件里——这个事件只有当用户点击ListBox改变选中项时才会触发!程序启动后根本不会执行这段加载代码。你应该把这段逻辑移到窗体的Load事件里,或者在窗体初始化的时候手动调用一个专门的加载方法。DataReader的遍历方式不对:
SQLiteDataReader(也就是你代码里的non变量)用foreach遍历的话,拿到的是DbDataRecord对象,直接把这个对象加到ListBox里,它只会显示对象的类型名称,而不是你要的用户名。你得通过字段名提取实际的字符串值:USR["Username"].ToString()。数据库资源没正确管理:你的代码里没确保连接是打开的,也没释放连接/命令/reader资源,很容易导致连接泄漏或者读取失败。建议用
using语句来自动管理这些资源,不用手动关闭。
这里是修复后的完整代码示例:
// 把这段代码放到窗体的Load事件中(记得在窗体设计器里绑定Form_Load事件) private void YourFormName_Load(object sender, EventArgs e) { // 用using自动释放连接资源 using (var conn = new SQLiteConnection("你的SQLite连接字符串")) // 替换成你实际的连接字符串 { conn.Open(); string query = "SELECT Username FROM Userdata"; using (SQLiteCommand cmd = new SQLiteCommand(query, conn)) { using (SQLiteDataReader reader = cmd.ExecuteReader()) { // 先清空ListBox避免重复加载 UserList.Items.Clear(); // 用Read()循环读取每一行数据 while (reader.Read()) { // 提取Username字段的字符串值 string username = reader["Username"].ToString(); UserList.Items.Add(username); } } } } }
最后再检查几个关键点:
- 确认你的连接字符串是正确的,数据库文件存在且能正常访问
- 确认
Userdata表确实存在,并且有Username字段 - 确认表里面有实际的用户数据(空表当然也不会显示内容啦)
内容的提问来源于stack exchange,提问作者We_Go
相关产品推荐
相关产品推荐

