在运行时通过用户生成的SQL显示数据

时间:2011-02-07 10:21:12

标签: asp.net asp.net-mvc

我有一个Winforms应用程序,可以让用户创建自己的报告。最简单的是,他们设计了加密并保存到数据库中的查询。

现在可以通过网络查看这些报告。

处理此问题的最佳方法是什么?理想情况下我想使用MVC,但是没有模型或视图模型,因为这些查询可以为应用程序中的任何表返回数据,因此我不能使用硬编码的等等。显然我可以访问SQL来执行它。

我想知道传统的ASP.Net在这种情况下是否表现更好,即/执行SQL并将其放在DataTable中,但希望能从社区中获得一些想法。

2 个答案:

答案 0 :(得分:1)

您将使用哪个版本的.NET?如果是4,那么您可以使用新的dynamic关键字。

在新的网络矩阵中使用了这个例子。它需要一个sql字符串并执行查询,结果对象将sql表字段作为属性。

由于Web矩阵构建在.NET平台上,您可以在Visual Studio中使用相同的库和方法。

如果您不知道对象上的属性,可以使用refection循环对象中的属性。

这是一个显示一些基础知识的link

更新

var db = Database.Open("bakery");
var p = db.Query("SELECT * FROM PRODUCTS"); // This returns a list of products

或者单个结果

var db = Database.Open("TDL");
var selectQueryString = "SELECT * FROM Articles WHERE slug = @0";
var show =  db.QuerySingle(selectQueryString, slug);

第一个例子来自我已经包含的链接,第二个例子来自here

更新2:

您需要的程序集是WebMatrix.Data和WebMatrix.WebData,MSDN。正如我之前所说,你需要使用反射来查找对象属性,只需要使用Google c#reflection,并且有很多关于使用它的教程。

答案 1 :(得分:1)

在类似的情况下,我在客户端使用带有DataTables.net的ASP.NET MVC。我在DataSet上有一个扩展方法,它返回DataTables.net所需的JSON格式的数据。您将需要html中的表/ thead存根描述每一列,但如果您从SQL查询中解析列名,则可能会生成,如果您在用户设计报表时存储列元数据,则可能更好