该书的第十章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
 

解决方案 »

  1.   

    嘿嘿,不好意思忘了。
    程序如下:
    .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);
          }
     }
      

  2.   

    OrderDate--
    你的sql语句是orderData,首字母没大写
      

  3.   

    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"); 
      

  4.   

    是不是select的时候orderdate没有指明使用哪个表的,改成下面的StringBuilder s=new StringBuilder("select OrderID,c.CompanyName,c.ContactName,"); 
            s.Append(" c.ContactTitle, c.Phone,o.orderDate"); 
            s.Append(" from orders o"); 
            s.Append(" inner join customers c on c.CustomerID=o.CustomerID"); 
      

  5.   


    SQL Server不是大小写敏感的。
      

  6.   

    呵呵sqlserver不敏感,但是你用vs来取值的时候
    是写成
    dataset.tables[0].rows[i]["orderData"]还是dataset.tables[0].rows[i]["OrderDate"] ?????
      

  7.   

    是不是select的时候orderdate没有指明使用哪个表的,改成下面的 StringBuilder s=new StringBuilder("select OrderID,c.CompanyName,c.ContactName,"); 
            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里面去执行看看结果,加不加有区别么?
      

  8.   

     CreateDataSet() 
    没有返回值
      

  9.   

    并且你绑定的OrderDate字段没有放进dataset里面
    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");
      

  10.   

    上面所说的修改我一个一个都试了一遍,都改不过来,错误还是一样。这些sql语句我都在查询分析器中执行了一遍。都没有问题。
      

  11.   

    private DataSet CreateDataSet() 
    没return
      

  12.   

    我的vs2008自带的crystalReportView是英文的 你们怎么解决的啊?
      

  13.   

    我的vs2008自带的crystalReportView是英文的 你们怎么解决的啊?
    啊 2005是中文的啊? 哎 我发了一个100分的帖子 可也没人回复
    杂么办呢?
      

  14.   

    “ OrderDate”前面多了个空格  你的问题很简单 我的就难了。
      

  15.   

    “ OrderDate" 改成“OrderDate" 呵呵