2017-08-08 7 views
0

エンティティへのLINQの使用。 SQLConnectionsまたは他の方法ではありません。エンティティへのlinqは、データベーステーブルの行の値を取得し、label.Text C#.netとして表示します。

私は1つのDataTableの 'ID'と別のDataTableの対応する '名前'を同じデータベースに表示する必要があるウェブページを持っています。 IDと名前はlblOrderId.Text = OrderId.ToString();と表示されます。およびlblName.Text = Name.ToString();それぞれ、
文字列である必要はありません。データベースの値をラベルに入れたいだけです。

今のところ私はラベルテキストを取得していませんが、このコードの下にあるコードを使用すれば、注文と配送の日付がわかります。

OrderIdを含むDatatableには2つの列があります。 OrderIdは自動生成され、列0とProductIdにあります。名前を含む

のDataTableが6列、名前列に0が自動生成された顧客ID

を保持しているとして、1列目にいるを持っている私に必要なのは、ラベルとして表示される最後の追加名前とIDです。

私は過去5時間このサイトや他のサイトでこれを調べており、自分のニーズに合った解決策を見つけることができないようです。これは、すべてのSQL接続と、テキストボックスへのデータベース値の疎な散水です。

私が達成したことを以下のコードで確認してください。さらにコードや情報が必要な場合は、お気軽にお問い合わせください。

ご提供いただけるご提案や援助をありがとうございます。

ASPX.CS(バックエンド)の名前に関する以下の方法とまったく同じエラーに直面

protected void Page_Load(object sender, EventArgs e) 
    { 
     using (Entities myEntities = new Entities()) 
     { 
      int OrderId = // Not sure what to put here, but if I don't have it I get the error *The name OrderId does not exist in the current context* 
      var orderId = (from ord in myEntities.Orders 
          where ord.OrderId.Equals(OrderId) // Error here 
          select ord).Last();     

      lblOrderID.ForeColor = Color.Red; 
      lblOrderID.Text = orderId.ToString(); 

。両方のメソッドは、同じUsing Entities {}の中括弧内に含まれています。

var name = (from ord in myEntities.Customer 
         where ord.Name.Equals(Name) 
         select ord).Last(); 

      lblName.ForeColor = Color.Red; 
      lblName.Text = name.ToString(); 

、それでも

 DateTime date = DateTime.Now; 
     DateTime DeliveryDate = date.AddDays(5); 

     lblDate.ForeColor = Color.Red; 
     lblDeliveryDate.ForeColor = Color.Red; 

     lblDate.Text = date.ToLongDateString(); 
     lblDeliveryDate.Text = DeliveryDate.ToLongDateString(); 

全ブロックの下方に見られるように、私は注文日と配達日を追加するために、次のコードを持っている中括弧}をPage_Load {内部使用のエンティティ{}中括弧を閉じますPage_Load

protected void Page_Load(object sender, EventArgs e) 
    { 
     using (Entities myEntities = new Entities()) 
     { 
      //int OrderId = Convert.ToInt32(); // Not sure what to put here, but if I don't have it I get the error *The name OrderId does not exist in the current context* 

      var orderId = (from ord in myEntities.Orders 
          where ord.OrderId.Equals(OrderId)// Error here 
          select ord).Last(); 

      lblOrderID.ForeColor = Color.Red; 
      lblOrderID.Text = orderId.ToString(); 


      var name = (from ord in myEntities.Customer 
         where ord.Name.Equals(Name) 
         select ord).Last(); 

      lblName.ForeColor = Color.Red; 
      lblName.Text = name.ToString(); 
     } 

     DateTime date = DateTime.Now; 
     DateTime DeliveryDate = date.AddDays(5); 

     lblDate.ForeColor = Color.Red; 
     lblDeliveryDate.ForeColor = Color.Red; 

     lblDate.Text = date.ToLongDateString(); 
     lblDeliveryDate.Text = DeliveryDate.ToLongDateString(); 
    } 

ASPX(フロントエンド)

<p> 
      Hi 
     <asp:Label ID="lblName" runat="server" Text=""></asp:Label> 
      Thank you for shopping at Cineplex.<br /> 
      <br /> 

      Your Order ID number is: 
     <asp:Label ID="lblOrderID" runat="server" Text=""></asp:Label><br /> 
      <br /> 

      Your order was placed on: 
     <asp:Label ID="lblDate" runat="server" Text=""></asp:Label><br /> 
      <br /> 

      Delivery date: 
     <asp:Label ID="lblDeliveryDate" runat="server" Text=""></asp:Label> 
     </p> 

バックエンドで以下のコードを使用して表示されるように、名前と注文IDをハードコードし、エンティティとクエリを削除すると、扱いが効きますが、それは受け入れられません。顧客は、購入が成功すると注文IDを表示する必要があります。
ここでの唯一の慰めは、クライアントが読むことができる4つのラベルすべてに値を取得することです。

protected void Page_Load(object sender, EventArgs e) 
    { 
     lblName.ForeColor = Color.Red; 
     lblName.Text = "User"; 

     lblOrderID.ForeColor = Color.Red; 
     lblOrderID.Text = "1"; 

     DateTime date = DateTime.Now; 
     DateTime DeliveryDate = date.AddDays(5); 

     lblDate.ForeColor = Color.Red; 
     lblDeliveryDate.ForeColor = Color.Red; 

     lblDate.Text = date.ToLongDateString(); 
     lblDeliveryDate.Text = DeliveryDate.ToLongDateString(); 
    } 

答えて

0

あなたの質問はすべてデータベースから何かを照会することです。あなたは問題から何かを逸らすだけで、クエリからすべてのASPのものを削除することができます。

代わりにエンティティクラス(Order、Customer)を表示する必要があります。私が理解しているように、特定の注文のためにOrder.OrderIdCustomer.Name(注文した顧客のもの)が欲しいです。 Page_Loadインサイド

public class Customer 
{ 
    public int CustomerId; // identifies a customer 
    public string Name; // the customer's name 
    public ICollection<Order> Orders; // collection of customer's orders 
} 

public class Order 
{ 
    public int OrderId; // identifies an order 
    public int CustomerId { get; } // ID of the customer who's order it is. 
    public Customer Customer { get; } // The Customer entity of that customer 
} 

(関係ありません何を離れて残して)

// 1st find out the ID of the one and only order the page is about 
int orderId = 4711; // can't help here - where do you intend to get it from? 

// 2nd retrieve from DB whatever we need later 
string customerName; 
using (var myEntities = new Entities()) 
{ 
    var orderInfo = (
     from order in myEntities.Orders 
     where order.OrderId == orderId 
     select new { CustomerName = order.Customer.Name } 
     ).SingleOrDefault(); 
    if (orderInfo == null) // error handling if orderId is bad 
     throw new Exception("No such order found."); 
    customerName = orderInfo.CustomerName; 
} 

// 3rd use what we know to update controls 
lblName.Text = customerName; 
+0

ありがとうございます。より簡潔な質問を掲示することについてのあなたのコメントと同じように、本当に感謝しています。 int orderId = 4711; //ここでは助けてはいけません - どこから手に入れようとしていますか?私はデータベース内にある注文テーブルからそれを検索するつもりでした。 ordersテーブルには、自動生成されたOrderIdとCustomerIdと、注文が行われた日付が含まれています。 –

0

結果:あなたはいつもの顧客/注文サンプルモデルで行くと仮定すると、

、あなたのエンティティは次のようにについて見なければなりません。 私は、彼らがそうのように作成されたaspx.csページ上の2つの異なるセッションで最初の変数を保存:

:次にaspx.csページに、私は次のことをやったデータベーステーブルを照会したい
int custID = Cust.CustomerId; 
Session["CustID"] = Cust.CustomerId; 

int newOrderID = ord.OrderId; 
Session["newOrderID"] = ord.OrderId; 

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["CustID"] != null) 
     { 
      int CID = (int)Session["CustID"]; 

      using (var myEntities = new Entities()) 
      { 
       var CustName = (from customer in myEntities.Customer 
           where customer.CustomerId == (CID) 
           select customer.Name).SingleOrDefault(); 
       if (CustName == null) // error handling if customer name does not exist 
        throw new Exception("No such Customer found."); 
       lblName.ForeColor = Color.Red; 
       lblName.Text = CustName; 
      } 
     } 
     if (Session["newOrderID"] != null) 
     { 
      int OID = (int)Session["CustID"]; 

      using (var myEntities = new Entities()) 
      { 
       var OrderNum = (from order in myEntities.Orders 
           where order.OrderId == (OID) 
           select order.OrderId).SingleOrDefault(); 
       if (OrderNum == 0) // error handling if customer name does not exist 
        throw new Exception("No such Order found."); 
       lblOrderID.ForeColor = Color.Red; 
       lblOrderID.Text = OrderNum.ToString(); 
      } 
     } 

     DateTime date = DateTime.Now; 
     DateTime DeliveryDate = date.AddDays(5); 

     lblDate.ForeColor = Color.Red; 
     lblDeliveryDate.ForeColor = Color.Red; 

     lblDate.Text = date.ToLongDateString(); 
     lblDeliveryDate.Text = DeliveryDate.ToLongDateString(); 
    } 

アドバイスや提案をいただいた皆さん、ありがとうございます。とても有難い。

+0

(1)CustomerIdは冗長です:OrderIdがSessionにある場合、CustomerIdが与えられます。 (2)EFの力を使って、私がやったのと同じように1つのクエリで必要なものすべてを手に入れてください。 – tinudu

+0

Tinuduありがとうございます。私はこの問題を解決することができましたが、将来的にはあなたの方法に近いものを使用することになります。不要なコードを書くことは時宜にかなっているだけでなく、エラーが発生して紛失する可能性もあります。 –

関連する問題