尝试解决一个简单的Web应用程序,我在Visual Studio 2017中创建了一个项目,当我使用与表对应的模型时,该项目工作正常(我遵循教程:https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx )。
我想运行一个原始的sql查询,这样我就可以处理结果,操作并写回另一个表,或只显示结果
在我的控制器中我有:
public ActionResult RunQuery001()
{
string query = "SELECT @@VERSION";
return View(db.Servers.SqlQuery(query).ToArray());
}
我创建了一个看起来像的视图:
@model IEnumerable<omfgshootmenow.Server>
@{
ViewBag.Title = "RunQuery001";
}
@foreach (var item in Model)
{
@Html.DisplayFor(model => item.ToString());
}
代码构建但是当我执行时,我得到一个例外:
消息=数据阅读器与指定的(此处的型号)不兼容类型的成员&#39; id&#39;在数据阅读器中没有相应的列具有相同的名称。
我一直认为视图是完全错误的(或整个事情是),因为异常引用了模型的键列。
感谢任何帮助。
答案 0 :(得分:0)
我确定这是因为您的数据形状与Server
的类型不匹配。
当您查询db.Servers
时,您必须返回与服务器匹配的内容。
如果要返回任何非实体类型,则应使用context.Database.SqlQuery
。见这里:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx
答案 1 :(得分:0)
要获取字符串,应使用以下内容,请参阅为非实体类型编写SQL查询 here
部分var query = db.Database.SqlQuery<string>("SELECT @@VERSION").FirstOrDefault();
ViewBag.SQLDBVersion= query; // viewbag is dynamic
观看
@MvcHtmlString.Create(ViewBag.SQLDBVersion)
答案 2 :(得分:0)
首先确保你的模型是IDENTICAL:我的意思是如果任何字段可以为空,它必须在你的模型中可以为空(更新你的模型)。另一个原因,尝试省略.ToArray(),将结果保存在变量中并检查ii.Maybe,出于测试原因,尝试使用其他方法获取日期(例如https://msdn.microsoft.com/en-us/library/fksx3b4f.aspx)