.NET 6.0中DataGridView无法加载SQL Server数据表,.NET 4.8正常如何排查?
排查.NET 6.0中DataGridView无法显示Recipes表数据的原因
可能的失效原因及对应解决步骤
- 资源管理不规范:原代码手动调用
Dispose,若中间出现异常会导致资源未正常释放,干扰后续数据绑定。.NET 6推荐用using语句自动管理资源生命周期。 - 连接字符串配置问题:升级后
cs变量对应的连接字符串可能因配置文件结构变更(如从app.config转为appsettings.json)失效,需确认连接字符串格式及读取逻辑正确。 - SqlClient命名空间兼容性:.NET 6官方推荐使用
Microsoft.Data.SqlClient替代旧版System.Data.SqlClient,若项目仍引用旧命名空间,可能存在隐性兼容性问题。 - DataGridView未触发绑定刷新:部分场景下仅设置
DataSource不足以触发UI更新,需手动调用刷新方法。
修正后的完整可运行代码
// 确保已安装Microsoft.Data.SqlClient NuGet包 using Microsoft.Data.SqlClient; using System.Data; using System.Windows.Forms; private void btnViewAll_Click(object sender, EventArgs e) { try { string connectionString = cs; // 确认cs为有效连接字符串 using (SqlConnection cn = new SqlConnection(connectionString)) { string query = "SELECT * FROM Recipes"; using (SqlCommand cmd = new SqlCommand(query, cn)) { using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { DataTable dt = new DataTable(); da.Fill(dt); // 先清空再绑定,避免旧数据残留 dgvRecipes.DataSource = null; dgvRecipes.DataSource = dt; // 强制刷新DataGridView绑定 dgvRecipes.ResetBindings(); } } } } catch (Exception ex) { MessageBox.Show($"操作失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
额外验证步骤
- 安装
Microsoft.Data.SqlClientNuGet包:.NET 6 WinForms项目默认不包含该包,需手动安装。 - 检查DataTable数据:在
da.Fill(dt)后添加Console.WriteLine($"读取到{dt.Rows.Count}条数据"),确认是否成功从数据库获取数据。 - 验证连接字符串:可在代码中单独测试连接是否能正常打开,排除数据库连接失败的可能。
内容的提问来源于stack exchange,提问作者Harvey Mitchell Hermoza
相关产品推荐
相关产品推荐

