You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Visual Studio 2019-2022中添加SQLite作为数据源以支持RDLC报表开发?

如何在Visual Studio 2019-2022中添加SQLite作为数据源以支持RDLC报表开发?

我完全懂你这种头疼的处境——VS2015里顺手到飞起的SQLite数据源功能突然没了,旧版本又快到扩展支持的尽头,换了2019/2022版本后,连RDLC报表的数据源向导都找不到SQLite的影子,ORM和xsd数据集也卡壳,太闹心了!我之前帮好几个朋友解决过这个问题,给你几个亲测有效的方案:


方案一:手动构建强类型实体类(替代xsd数据集)

这是我最推荐的方案,灵活还不依赖VS的数据源向导,ORM也能正常用:

  1. 映射SQLite表结构到实体类:你可以用EF Core的反向工程(Scaffold-DbContext命令)直接从SQLite数据库生成实体类和DbContext,或者自己手动写对应表结构的类——比如你的SQLite里有个Orders表,就写个Order类,把每个字段对应成类的属性。
  2. 将实体类作为RDLC的数据源:打开RDLC报表的数据源面板,点击“添加数据源”,选择“对象”类型,然后选中你刚才创建的实体类(如果是集合的话,选对应的泛型集合类型)。之后就能像之前用xsd一样,把实体类的字段拖到报表里,表达式里也能直接引用这些属性。
  3. 代码绑定数据:不管你用EF Core还是直接用SQLiteConnection查询数据,把结果转换成实体类的集合,然后绑定到ReportViewer上就行。比如用EF Core的话:
    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();
    
    这样ORM完全能正常用,根本不用依赖VS的数据源向导。

方案二:用ODBC数据源作为中间层

如果还是习惯用数据库数据源向导的方式,可以试试ODBC的路子,VS对ODBC的支持一直很稳定:

  1. 安装SQLite ODBC驱动:去SQLite官方下载对应你系统位数(x86/x64)的ODBC驱动包,安装到本地。
  2. 创建ODBC系统DSN:打开Windows的“ODBC数据源管理器”(注意对应VS的位数,64位VS就开64位管理器,32位就开32位),切换到“系统DSN”标签,点击“添加”,选择SQLite ODBC驱动,然后配置你的数据库文件路径,给DSN起个名字(比如SQLite_Report_DB)。
  3. 在VS里用ODBC连接SQLite:打开RDLC的数据源向导,选“数据库”->“数据集”,然后数据提供者选“.NET Framework Data Provider for ODBC”,下一步选择你刚才创建的ODBC DSN,就能连接到SQLite数据库,选择需要的表或视图生成数据集,之后就能在RDLC里正常用了。

方案三:手动修复SQLite数据提供者的注册(针对安装了Bundle但无效的情况)

如果你已经装了SQLite Data Provider Bundle但还是没用,大概率是VS没正确注册这个提供者,手动改配置试试:

  1. 找到VS的配置文件:比如VS2022 Community版的话,路径是C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe.config
  2. 添加SQLite提供者注册项:打开这个配置文件,找到<system.data>下的<DbProviderFactories>节点(如果没有就自己在<system.data>里加),添加以下内容:
    <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
         description=".NET Framework Data Provider for SQLite" 
         type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    
    注意如果已经有这个项,检查有没有被注释掉,或者invariant值是否正确。
  3. 重启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

火山引擎 最新活动