该书的第十章ADO.NET中有一个例题:关于在DataSet中创建DataRelations
运行以后出现下面的错误:程序贴在后面,麻烦各位帮忙看看!我都看了一早上了。
“/DataRelation”应用程序中的服务器错误。
--------------------------------------------------------------------------------在选定的数据源上未找到名为“ OrderDate”的字段或属性。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 在选定的数据源上未找到名为“ OrderDate”的字段或属性。源错误:
行 21: DataSet ds = CreateDataSet();
行 22: GridView1.DataSource = ds.Tables[0];
行 23: GridView1.DataBind();
行 24:
行 25: //创建DataView,并将其绑定到GridView
源文件: d:\ProASP.NET\Chapter10\DataRelation\Default.aspx.cs 行: 23 堆栈跟踪:
[HttpException (0x80004005): 在选定的数据源上未找到名为“ OrderDate”的字段或属性。]
System.Web.UI.WebControls.BoundField.GetValue(Control controlContainer) +1847181
System.Web.UI.WebControls.BoundField.OnDataBindField(Object sender, EventArgs e) +60
System.Web.UI.Control.OnDataBinding(EventArgs e) +99
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +206
System.Web.UI.Control.DataBind() +12
System.Web.UI.Control.DataBindChildren() +216
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +216
System.Web.UI.Control.DataBind() +12
System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +221
System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +3004
System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +59
System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +11
System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +111
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +29
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
System.Web.UI.WebControls.GridView.DataBind() +4
_Default.Page_Load(Object sender, EventArgs e) in d:\ProASP.NET\Chapter10\DataRelation\Default.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
运行以后出现下面的错误:程序贴在后面,麻烦各位帮忙看看!我都看了一早上了。
“/DataRelation”应用程序中的服务器错误。
--------------------------------------------------------------------------------在选定的数据源上未找到名为“ OrderDate”的字段或属性。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 在选定的数据源上未找到名为“ OrderDate”的字段或属性。源错误:
行 21: DataSet ds = CreateDataSet();
行 22: GridView1.DataSource = ds.Tables[0];
行 23: GridView1.DataBind();
行 24:
行 25: //创建DataView,并将其绑定到GridView
源文件: d:\ProASP.NET\Chapter10\DataRelation\Default.aspx.cs 行: 23 堆栈跟踪:
[HttpException (0x80004005): 在选定的数据源上未找到名为“ OrderDate”的字段或属性。]
System.Web.UI.WebControls.BoundField.GetValue(Control controlContainer) +1847181
System.Web.UI.WebControls.BoundField.OnDataBindField(Object sender, EventArgs e) +60
System.Web.UI.Control.OnDataBinding(EventArgs e) +99
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +206
System.Web.UI.Control.DataBind() +12
System.Web.UI.Control.DataBindChildren() +216
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +216
System.Web.UI.Control.DataBind() +12
System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +221
System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +3004
System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +59
System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +11
System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +111
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +29
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
System.Web.UI.WebControls.GridView.DataBind() +4
_Default.Page_Load(Object sender, EventArgs e) in d:\ProASP.NET\Chapter10\DataRelation\Default.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
程序如下:
.aspx文件
<asp:GridView ID="GridView1" runat="server" DataKeyNames="OrderID" AutoGenerateColumns="False"
PagerSettings-mode="numeric" AllowPaging="True" PageSize="5" OnSelectedIndexChanged="GridView1_SelectedIndexChangedHandler">
<Columns>
<asp:ButtonField ButtonType="Button" CommandName="Select" Text="Details" />
<asp:BoundField DataField="OrderID" HeaderText="Order ID" />
<asp:BoundField DataField=" OrderDate" HeaderText="Order Date" />
<asp:BoundField DataField="CompanyName" HeaderText="Company" />
<asp:BoundField DataField="ContactTitle" HeaderText="Contact" />
<asp:BoundField DataField="Phone" HeaderText="Phone" />
</Columns>
</asp:GridView>
<asp:Panel ID="OrderDetailsPanel" runat="Server" Height="50px" Width="125px">
<asp:GridView ID="DetailsGridView" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:BoundField DataField="OrderDate" HeaderText="Order Date" />
<asp:BoundField DataField="ProductName" HeaderText="Product" />
<asp:BoundField DataField="UnitPrice" HeaderText ="Price" />
<asp:BoundField DataField="Quantity" HeaderText="Quantity" />
</Columns>
</asp:GridView>
</asp:Panel>
<asp:GridView ID="OrderRelationGridView" runat="server">
</asp:GridView>
代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;using System.Text;//用于字符串处理
using System.Data.SqlClient;//用于数据处理public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
UpdateDetailsGrid();
DataSet ds = CreateDataSet();
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind(); //这是第23行,即出现错误的地方。
//创建DataView,并将其绑定到GridView
DataView detailsview = new DataView(ds.Tables[1]);
DetailsGridView.DataSource = detailsview;
Session["detailsview"] = detailsview;
DetailsGridView.DataBind();
//将OrderRelationGridView绑定到关系集合
OrderRelationGridView.DataSource = ds.Relations;
OrderRelationGridView.DataBind();
}
}
//获取订单细节
protected void GridView1_SelectedIndexChangedHandler(object sender, EventArgs e)
{
UpdateDetailsGrid();
}
public void UpdateDetailsGrid()
{
int index=GridView1.SelectedIndex;
if(index!=-1)
{
//从GridView中获取订单ID号
DataKey key=GridView1.DataKeys[index];
int orderid=(int)key.Value;
DataView detailsview=(DataView)Session["detailsview"];
detailsview.RowFilter="OrderID= " + orderid;
DetailsGridView.DataSource=detailsview;
DetailsGridView.DataBind();;
OrderDetailsPanel.Visible=true;
}
else
{
OrderDetailsPanel.Visible=false;
}
}
private DataSet CreateDataSet()
{
//使用连接字符串连接到Orders数据库
string connectionstring = "Data Source=(local);Initial Catalog=NorthWind;User ID=sa;Password=123";
//创建连接对象,初始化连接字符串并打开连接
SqlConnection conn=new SqlConnection(connectionstring);
conn.Open(); //创建Sqlcommand对象,并为其设置连接
SqlCommand comm=new SqlCommand();
comm.Connection=conn; StringBuilder s=new StringBuilder("select OrderID,c.CompanyName,c.ContactName,");
s.Append(" c.ContactTitle, c.Phone,orderDate");
s.Append(" from orders o");
s.Append(" inner join customers c on c.CustomerID=o.CustomerID");
//为select 语句设置命令文本
comm.CommandText=s.ToString(); //创建SqlDataAdapter,并为其设置命令对象
//为bugs添加表映射
SqlDataAdapter dataadapter=new SqlDataAdapter();
dataadapter.SelectCommand=comm;
dataadapter.TableMappings.Add("Table", "Orders"); //创建DataSet,并使用dataadapter填充
DataSet dataset=new DataSet();
dataadapter.Fill(dataset);
//为订单创建第二个命令对象
SqlCommand comm2=new SqlCommand();
comm2.Connection=conn; //确认添加了一个列,这样您可以为产品创建一个关系
StringBuilder s2=new StringBuilder("select od.OrderID,OrderDate,p.ProductID, ");
s2.Append(" ProductName,od.UnitPrice,Quantity");
s2.Append(" from Orders o");
s2.Append(" inner join [Order Details] od on o.orderid=od.orderid");
s2.Append(" inner join products p on p.productid=od.productid");
comm2.CommandText=s2.ToString();
//创建第二个SqlDataAdapter
//添加命令和表映射,然后使用第二个SqlDataAdapter填充DataSet
SqlDataAdapter dataadapter2=new SqlDataAdapter();
dataadapter2.SelectCommand=comm2;
dataadapter2.TableMappings.Add("Table","Order Details");
dataadapter2.Fill(dataset);
}
}
你的sql语句是orderData,首字母没大写
s.Append(" c.ContactTitle, c.Phone,orderDate"); -----这里
s.Append(" from orders o");
s.Append(" inner join customers c on c.CustomerID=o.CustomerID");
s.Append(" c.ContactTitle, c.Phone,o.orderDate");
s.Append(" from orders o");
s.Append(" inner join customers c on c.CustomerID=o.CustomerID");
SQL Server不是大小写敏感的。
是写成
dataset.tables[0].rows[i]["orderData"]还是dataset.tables[0].rows[i]["OrderDate"] ?????
s.Append(" c.ContactTitle, c.Phone,o.orderDate");
s.Append(" from orders o");
s.Append(" inner join customers c on c.CustomerID=o.CustomerID");
---------------
你放到sqlserver里面去执行看看结果,加不加有区别么?
没有返回值
StringBuilder s = new StringBuilder("select o.OrderID,o.orderdate,c.CompanyName,c.ContactName,");
s.Append(" c.ContactTitle, c.Phone,orderDate");
s.Append(" from orders o");
s.Append(" inner join customers c on c.CustomerID=o.CustomerID");
没return
啊 2005是中文的啊? 哎 我发了一个100分的帖子 可也没人回复
杂么办呢?