如何在Visual Studio 2019-2022中添加SQLite作为数据源以支持RDLC报表开发?
如何在Visual Studio 2019-2022中添加SQLite作为数据源以支持RDLC报表开发?
我完全懂你这种头疼的处境——VS2015里顺手到飞起的SQLite数据源功能突然没了,旧版本又快到扩展支持的尽头,换了2019/2022版本后,连RDLC报表的数据源向导都找不到SQLite的影子,ORM和xsd数据集也卡壳,太闹心了!我之前帮好几个朋友解决过这个问题,给你几个亲测有效的方案:
方案一:手动构建强类型实体类(替代xsd数据集)
这是我最推荐的方案,灵活还不依赖VS的数据源向导,ORM也能正常用:
- 映射SQLite表结构到实体类:你可以用EF Core的反向工程(
Scaffold-DbContext命令)直接从SQLite数据库生成实体类和DbContext,或者自己手动写对应表结构的类——比如你的SQLite里有个Orders表,就写个Order类,把每个字段对应成类的属性。 - 将实体类作为RDLC的数据源:打开RDLC报表的数据源面板,点击“添加数据源”,选择“对象”类型,然后选中你刚才创建的实体类(如果是集合的话,选对应的泛型集合类型)。之后就能像之前用xsd一样,把实体类的字段拖到报表里,表达式里也能直接引用这些属性。
- 代码绑定数据:不管你用EF Core还是直接用
SQLiteConnection查询数据,把结果转换成实体类的集合,然后绑定到ReportViewer上就行。比如用EF Core的话:
这样ORM完全能正常用,根本不用依赖VS的数据源向导。var orderData = _dbContext.Orders.Where(o => o.OrderDate > DateTime.Now.AddMonths(-1)).ToList(); reportViewer1.LocalReport.DataSources.Clear(); reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("OrderDataSet", orderData)); reportViewer1.RefreshReport();
方案二:用ODBC数据源作为中间层
如果还是习惯用数据库数据源向导的方式,可以试试ODBC的路子,VS对ODBC的支持一直很稳定:
- 安装SQLite ODBC驱动:去SQLite官方下载对应你系统位数(x86/x64)的ODBC驱动包,安装到本地。
- 创建ODBC系统DSN:打开Windows的“ODBC数据源管理器”(注意对应VS的位数,64位VS就开64位管理器,32位就开32位),切换到“系统DSN”标签,点击“添加”,选择SQLite ODBC驱动,然后配置你的数据库文件路径,给DSN起个名字(比如
SQLite_Report_DB)。 - 在VS里用ODBC连接SQLite:打开RDLC的数据源向导,选“数据库”->“数据集”,然后数据提供者选“.NET Framework Data Provider for ODBC”,下一步选择你刚才创建的ODBC DSN,就能连接到SQLite数据库,选择需要的表或视图生成数据集,之后就能在RDLC里正常用了。
方案三:手动修复SQLite数据提供者的注册(针对安装了Bundle但无效的情况)
如果你已经装了SQLite Data Provider Bundle但还是没用,大概率是VS没正确注册这个提供者,手动改配置试试:
- 找到VS的配置文件:比如VS2022 Community版的话,路径是
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe.config。 - 添加SQLite提供者注册项:打开这个配置文件,找到
<system.data>下的<DbProviderFactories>节点(如果没有就自己在<system.data>里加),添加以下内容:
注意如果已经有这个项,检查有没有被注释掉,或者invariant值是否正确。<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> - 重启VS:之后再打开数据源向导,应该就能看到SQLite的选项了。不过这个方案在VS新版本里有时候会被自动覆盖配置,所以更推荐前两个方案。
一些额外的小提醒
- 如果你用ORM(比如EF Core),完全不用纠结VS的数据源向导——代码里直接查询数据,绑定到ReportViewer就行,和VS2015里的体验几乎一致。
- 要是项目用的是.NET 6+的SDK,记得安装对应版本的ReportViewer NuGet包(比如
Microsoft.ReportingServices.ReportViewerControl.WinForms),SQLite用Microsoft.Data.Sqlite或者System.Data.SQLite.Core,版本要匹配。 - 别再依赖VS2015了,上面这几个方案在2019-2022版本里都能稳定运行,完全能替代旧版本的功能。
内容来源于stack exchange




