我正在尝试建立一个通用的报告系统,以便可以将报告即时添加到我的程序中,而不是每次必须添加报告时都发布该程序的新版本。 目前,我有部分工作; 我的自定义报告SQL与报告名称一起存储在表中。报表名称用于用户单击的按钮,当用户单击按钮时,我希望SQL执行并绑定到gridview,因此它尽可能通用。
尽管这似乎是麻烦的出处。获取SQL并执行它是可以的,但是将它绑定到gridview似乎是不可能的,我只得到一列,称为Column,它显示1行,其值为System.Object。
我认为问题是因为我要从多个表返回数据,即
SELECT c.CertificateName, e.EntityName, ce.CertificateDate, ce.CertificateExpiry, ce.CertificateNumber FROM FCERTSTest.dbo.CertificateEntries ce INNER JOIN FCERTSTest.dbo.Certificates c ON c.CertificateID = ce.Certificate_ID INNER JOIN FCERTSTest.dbo.Entities e ON e.EntityID = ce.Entity_ID WHERE FirstNotificationSent = '1'
我目前正在使用
using (DBContainer db = new DBContainer()) { grid.DataSource = db.Database.SqlQuery<dynamic>(SQLCommand).ToList(); }
我试着更换dynamic用object,并得到了同样的问题。我明白,最好的解决办法是有一个自定义类和替换dynamic与自定义类,但后来我失去了它的好处是通用为不同的报表可能不会返回相同的结果,我将需要一个新的自定义类…
dynamic
object
使用SqlDataAdapter和DataSet。EF不适用于您没有针对结果集的特殊类型的“动态查询”。
SqlDataAdapter
DataSet