用C#和VB.NET实现同样一个功能,为什么C#好用而VB.NET出错,请帮忙看一下??

tflb 2003-10-18 06:53:07
<%@ Page Language="C#" Debug="true" ContentType="text/html" ResponseEncoding="gb2312"%>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script language="C#" runat="server">
public void Page_Load(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:/test/news.mdb");

// OleDbConnection conn = new OleDbConnection("provider=sqloledb;server=(local);database=news;uid=sa;pwd=tflbtest;");
OleDbDataAdapter da1 = new OleDbDataAdapter("select * from bigclass",conn);
OleDbDataAdapter da2 = new OleDbDataAdapter("select * from news n where newsid in (select top 5 newsid from news where bigclassid=n.bigclassid order by updatetime desc)",conn);

DataSet ds = new DataSet();

conn.Open();
da1.Fill(ds,"bigclass");
da2.Fill(ds,"news");
conn.Close();

ds.Relations.Add("myrelation", ds.Tables["bigclass"].Columns["bigclassid"], ds.Tables["news"].Columns["bigclassid"]);

parentDataGrid.DataSource = ds.Tables["bigclass"];
parentDataGrid.DataBind();

}
</script>
<html>
<body>
<form runat=server>
<asp:DataGrid id="parentDataGrid" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundColumn DataField="bigclassname" HeaderText="²¿ÃÅ" />
<asp:TemplateColumn HeaderText="±êÌâ">
<ItemTemplate>
<asp:DataGrid id="childDataGrid" runat="server" ShowHeader=false DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' AutoGenerateColumns="false">
<Columns>

<asp:TemplateColumn HeaderText="Title">
<ItemTemplate>
<asp:hyperlink
NavigateURL='<%#"newshow.aspx?newsid="+DataBinder.Eval(Container.DataItem,"[\"newsid\"]")%>'
Text='<%# DataBinder.Eval(Container.DataItem,"[\"title\"]") %>'
runat="server"/>

<%# DataBinder.Eval(Container.DataItem,"[\"updatetime\"]") %>

</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
没有问题!而下面有问题
<%@ Page Language="VB" Debug="true" ContentType="text/html" ResponseEncoding="gb2312" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script Language="VB" runat="server">

Sub Page_Load(sender As Object, e As EventArgs)
Dim conn as OleDbConnection

Dim da1,da2 as OleDbDataAdapter
Dim ds as DataSet
Dim strConn As String
strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.MapPath("./")&"data/news.mdb"
Conn = New OledbConnection(strConn)
da1 = new OleDbDataAdapter("select * from bigclass",conn)
da2 = new OleDbDataAdapter("select * from news n where newsid in (select top 5 newsid from news where bigclassid=n.bigclassid order by updatetime desc)",conn)

ds = new DataSet()

conn.Open()
da1.Fill(ds,"bigclass")
da2.Fill(ds,"news")
conn.Close()

ds.Relations.Add("myrelation", ds.Tables("bigclass").Columns("bigclassid"), ds.Tables("news").Columns("bigclassid"))


parentDataGrid.DataSource = ds.Tables("bigclass")
parentDataGrid.DataBind()
end sub

</script>
<html>
<body>
<form runat=server>
<asp:DataGrid id="parentDataGrid" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundColumn DataField="bigclassname" HeaderText="²¿ÃÅ" />
<asp:TemplateColumn HeaderText="±êÌâ">
<ItemTemplate>
<asp:DataGrid id="childDataGrid" Width="380" runat="server" ShowHeader=false DataSource='<%# Ctype(container.Dataitem,DataRowView).Row.GetChildRows("myrelation") %>' AutoGenerateColumns="false">
<Columns>

<asp:TemplateColumn HeaderText="Title">
<ItemTemplate>
<asp:hyperlink NavigateURL='<%#"newshow.aspx?newsid="+DataBinder.Eval(Container.DataItem,"newsID")%>'
Text='<%# DataBinder.Eval(Container.DataItem,"title") %>'
runat="server"/>

<%# DataBinder.Eval(Container.DataItem,"updatetime") %>

</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
DataBinder.Eval:“System.Data.DataRow”不包含名称为 newsid 的属性。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: DataBinder.Eval:“System.Data.DataRow”不包含名称为 newsid 的属性。

源错误:


行 44: <asp:TemplateColumn HeaderText="Title">
行 45: <ItemTemplate>
行 46: <asp:hyperlink NavigateURL='<%#"newshow.aspx?newsid="+DataBinder.Eval(Container.DataItem,"newsid")%>'
行 47: Text='<%# DataBinder.Eval(Container.DataItem,"[title]") %>'
行 48: runat="server"/>

请指点一下!先谢谢了!
...全文
37 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tflb 2003-10-19
  • 打赏
  • 举报
回复
谢谢niwalker,已经解决!
竹君子 2003-10-18
  • 打赏
  • 举报
回复
同意niwalker()
niwalker 2003-10-18
  • 打赏
  • 举报
回复
hehe, 你什么东西都考虑到了,就是没有想到那个“+“号吧?在vb.net中必须使用"&"
tflb 2003-10-18
  • 打赏
  • 举报
回复
我把"news"改写成"(newsID)"
提示:输入字符串的格式不正确。
Inyoureyes 2003-10-18
  • 打赏
  • 举报
回复
你把newsid中括号加上看看吧
Inyoureyes 2003-10-18
  • 打赏
  • 举报
回复
不好意思,看错了
Inyoureyes 2003-10-18
  • 打赏
  • 举报
回复
第46行尖括号不匹配,造成编译器将"newsid"认作属性值,所以你应该把尖括号匹配好
tflb 2003-10-18
  • 打赏
  • 举报
回复
up

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧