我有一个页面,用户可以在其中输入SQL查询。此查询可以针对我的数据库中的任何表。我需要对相应的表执行此查询并在我的视图中显示结果。怎么做?
例如:用户可以输入Select * from ABC
或select max(price) from items
。
我试过了:
var results = DbContext.Database.SqlQuery<string>(query).ToList();
但这会引发错误:
数据阅读器有多个字段。多个字段无效 对于EDM原语或枚举类型。
无论结果如何,我都应该将其传递给视图并显示它。
请帮忙。
答案 0 :(得分:0)
你可以使用
SqlQuery<dynamic>"
这将解决错误,但您只能获得返回结果的计数。因此,您只需验证查询是否已返回一些数据。但仍需要知道返回数据的类型。
存在向用户提供向数据库输入查询的风险。
答案 1 :(得分:0)
错误消息准确说明了问题:
数据阅读器有多个字段。多个字段对EDM原语或枚举类型无效。
要解决此问题,您可以提交从数据库返回单个字符串列的SQL字符串,也可以提供允许EF映射多个列的类型参数。
例如:
SELECT someStringColumn FROM ABC
OR
var results = DbContext.Database.SqlQuery<MyDto>(query).ToList();
MyDTO看起来像这样:
class MyDto
{
public int AddressID { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}