2011-03-29 50 views
0

我有一个电子商务网络应用程序,它允许用户在我的网站上购买软件组件。我正在检索用户从SQL Server的UserTransactionHistory表中购买的发票号和软件组件标题。我将它们存储在ArrayList中具有的SoftwareTitles类asp.net/c#中的数据结构问题#

public class SoftwareTitles 
{ 
    string softwareTitle; 
    string invoiceNumber; 

    public SoftwareTitles(string softwareTitle, string invoiceNumber) 
    { 
     this.softwareTitle = softwareTitle; 
     this.invoiceNumber = invoiceNumber; 
    } 

    string InvoiceNumber 
    {   
     get 
     { 
      return this.invoiceNumber; 
     } 
    } 

    string SoftwareTitle 
    { 
     get 
     { 
      return this.softwareTitle; 
     } 
    } 
} 

}

的帮助和我加入这个类以这种方式数组列表。

ConnectionToSql con1 = new ConnectionToSql(); 
     string connectionString = con1.ConnectionStringMethod(); 
     SqlConnection sqlConnection = new SqlConnection(connectionString); 
     SqlCommand cmd2 = new SqlCommand("SelectionOfSoftwareTitles", sqlConnection); 
     cmd2.CommandType = CommandType.StoredProcedure; 
     sqlConnection.Open(); 
     SqlDataReader dr2 = cmd2.ExecuteReader(); 

     if (dr2.HasRows) 
     { 
      while (dr2.Read()) 
      { 
       String softwareTitle = (String)dr2[0]; 
       String invoiceNumber = (String)dr2[1]; 
       softwareTitlesArray.Add(new SoftwareTitles(softwareTitle, invoiceNumber)); 
       int i = 0; 

      } 

     } 

     sqlConnection.Close(); 
     dr2.Close(); 

但是,当我想检索与某个发票号码相关联的所有软件标题时。我无法做到。

我是否正确地做? ArrayList是否适合这种操作的数据结构?我应该怎么做?

+0

@klabranche正如你可以看到它是一个多维数组列表。我想根据invoicenumber从该数组列表中检索值。 (int j = 0; j 2011-03-29 14:09:39

回答

1

我个人会使用非通用列表对象。

要声明:

List<Software> softwareTitles= New List<Software>(); 

和目标软件:

if (dr.HasRows) 
     { 
      while (dr.Read()) 
      { 
       string title = dr["TITLE_COLUMN"]; 
       int invoice = dr["INVOICE_COLUMN"]; 
       Software s = new Software(); 
       s.Title = title; 
       s.Invoice = invoice; 
       softwareTitles.add(s); 

      } 

     } 

,然后你可以在列表中使用一个简单的循环,像计数器,softwareTitles(I)遍历或者你甚至可以使用LINQ来完成任何你想做的事情。 例如

for (i=0; i<softwareTitles.Count;i++) 
{ 
    if (softwareTitles[i].Invoice==213) 
    { 
    Console.WriteLine(softwareTitles[i].Title); 
    } 
} 

这样的东西。对不起,我最近使用VB.NET,所以我的C#已经生锈了。但它似乎是正确的

+0

但我如何从列表中检索值取决于invoicenumber。 – 2011-03-29 14:06:02

+0

@ user653622:已更新! – waqasahmed 2011-03-29 14:09:28

+0

我不能像你提到的那样引用列表项。我的意思是softwareTitles(i).Invoice = 213它只是吓坏了! – 2011-03-29 14:37:18

1

使用通用列表集合来添加Objects和Linq来查询记录。

+0

我在我的项目中没有使用linq – 2011-03-29 13:58:08

+1

然后使用存储过程在自我检索时过滤记录。 – varadarajan 2011-03-29 14:02:57