小弟初学Entity Framework。现在有几个基本的问题搞不定,所以来CSDN请教各位高手。具体情况是这样。小弟本地SQL SERVER服务器上有一个自己建的SQL SERVER数据库。SQL语句很简单,就是:CREATE DATABASE myDB;
之后在myDB数据库中建了一张表:USE [myDB]
GO/****** Object: Table [dbo].[myTable] Script Date: 05/18/2009 17:29:39 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE TABLE [dbo].[myTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[myValue] [int] NOT NULL,
CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO
之后小弟建了一个Entity FrameWork类,其中包括表myTable。之后小弟有这么一个页面:<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="lbl" runat="server"></asp:Label><br />
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
</form>
</body>
</html>
后台这样写: protected void Page_Load(object sender, EventArgs e)
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE c FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}
这样GridView可以正确绑定结果。现在的问题是这样:
1、如果仅需要查询部分字段,那么这个查询语句应该怎样写?小弟这么做了一个尝试: protected void Page_Load(object sender, EventArgs e)
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}但是报错:The specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' type to the 'myDBModel.myTable' type is not valid. 是不是说只查询部分字段不能直接使用GridView进行绑定?还是有什么其他原因?小弟不知道应该怎么进行,希望诸位高手帮忙;
2、类似问题1,如果小弟这样写后台代码: protected void Page_Load(object sender, EventArgs e)
{
StringBuilder myBuilder = new StringBuilder(); using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); foreach (myTable t in query)
{
myBuilder.Append(t.myValue.ToString() + ",");
} Response.Write(myBuilder.ToString());
}
}请问小弟应该如何遍历查询结果?提前谢过各位高手!
之后在myDB数据库中建了一张表:USE [myDB]
GO/****** Object: Table [dbo].[myTable] Script Date: 05/18/2009 17:29:39 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE TABLE [dbo].[myTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[myValue] [int] NOT NULL,
CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO
之后小弟建了一个Entity FrameWork类,其中包括表myTable。之后小弟有这么一个页面:<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="lbl" runat="server"></asp:Label><br />
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
</form>
</body>
</html>
后台这样写: protected void Page_Load(object sender, EventArgs e)
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE c FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}
这样GridView可以正确绑定结果。现在的问题是这样:
1、如果仅需要查询部分字段,那么这个查询语句应该怎样写?小弟这么做了一个尝试: protected void Page_Load(object sender, EventArgs e)
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}但是报错:The specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' type to the 'myDBModel.myTable' type is not valid. 是不是说只查询部分字段不能直接使用GridView进行绑定?还是有什么其他原因?小弟不知道应该怎么进行,希望诸位高手帮忙;
2、类似问题1,如果小弟这样写后台代码: protected void Page_Load(object sender, EventArgs e)
{
StringBuilder myBuilder = new StringBuilder(); using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); foreach (myTable t in query)
{
myBuilder.Append(t.myValue.ToString() + ",");
} Response.Write(myBuilder.ToString());
}
}请问小弟应该如何遍历查询结果?提前谢过各位高手!
解决方案 »
- 一段js代码,有几个地方没看明白,希望大家帮帮忙.
- updatePanle做更新时如何只显示一个updateProgress的内容?
- 怎么样让一个页面打开的更快……o(∩_∩)o...
- 面试中遇到的疑难问题
- iframe如何获取父页面的URL?这个问题问得自己好累......
- asp。net2.0下image显示不出swf文件
- 那位高手指点一下,如何创建角色与权限呀。
- 为什么我的按钮中的文字总是靠上呢
- 难道就没有人用过asp.net连接ORCAL吗?帮忙呀!完成的代码段!
- 我的窗体为什么提交不了!只刷新!
- 有关asp c# webbrowser打印的问题。
- 给大家提供一个免费在线地图搜索,花了10分钟做的,课间时间练个手,欢迎大家拍砖哈
protected void Page_Load(object sender, EventArgs e)
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT c.Id,c.myValue FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}
protected void Page_Load(object sender, EventArgs e)
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT c.Id,c.myValue FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder myBuilder = new StringBuilder(); using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT c.Id,c.myValue FROM myTable AS c";
var query = db.CreateQuery<myTable>(Ssql); foreach (var r in query)
{
myBuilder.Append(r.myValue.ToString() + ",");
} Response.Write(myBuilder.ToString());
}
}
小弟把您的3层楼上的代码都粘到我自己的程序里执行了一下,全都报错。而且错误都是:“The specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' type to the 'myDBModel.myTable' type is not valid.”不知道是不是小弟少引用了什么?还是有什么其他原因?
我机器没有数据库,测试不了。你试下这个using System.Data.EntityClient;
using System.Data.Objects;
using System.Data.Common; EntityConnection ec = new EntityConnection("XXX");//xxx的位置为连接字符串
ObjectContext context = new ObjectContext(ec); ObjectQuery<DbDataRecord> queryTab = context.CreateQuery<DbDataRecord>("SELECT c.Id,c.myValue FROM myTable AS c "); foreach (var r in queryTab)
{
Response.Write(string.Format("{0},{1}", r[0].ToString(), r[1].ToString()));
}
你的后太查出来的标示 变了他也要变 不然识别不了
具体实现你可以去看下
http://www.cnblogs.com/Ewait/archive/2009/04/03/1428748.html
{
using (myDBEntities db = new myDBEntities())
{
string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
var query = db.CreateQuery<myTable>(Ssql); GridView1.DataSource = query;
GridView1.DataBind();
}
}
红色部分有问题 应该采用var query = db.CreateQuery<DbDataRecord>(Ssql)
采用row关键字是生存一个DbDataRecord实例 与myTable继承管理 所以不能转换