2016-08-23 116 views
0

我在for循环中定义长度时遇到问题。 我正在从SQL数据库中统计表中的行数,并希望此数字成为for循环的长度。作为for循环中的长度变量?

这是循环的代码:

protected void Page_Load(object sender, EventArgs e) 
    { 

     for (int i = 0; i < A; i++) 
     { 
      System.Web.UI.HtmlControls.HtmlGenericControl createDiv = 
      new System.Web.UI.HtmlControls.HtmlGenericControl("DIV"); 
      createDiv.ID = "createDiv"; 
      this.Controls.Add(createDiv); 
     } 

    } 

这是计数在我的数据库表中的行的代码。

public void A() 
    { 
     string stmt = "SELECT COUNT(*) FROM AlgSchipInfo"; 
     int count = 0; 

     using (SqlConnection thisConnection = new SqlConnection ("DataSource=VMB-LP12;Initial Catalog=SmmsData;Integrated Security=True")) 
     { 
      using (SqlCommand cmdCount = new SqlCommand(stmt, thisConnection)) 
      { 
       thisConnection.Open(); 
       count = (int)cmdCount.ExecuteScalar(); 
       TextBox2.Text = count.ToString(); 
      } 
     } 
    } 

我想通过在for for循环中创建div来显示我数据库中每艘船上的信息。

任何人都可以帮助我如何定义长度?

谢谢!

+3

更改'A'返回一个'int',使其返回'count',改变你的for循环'I'A()'我猜测?尽管如此,A'对于一种方法来说却是一个糟糕的名字。 –

+1

既然你想显示每条记录的信息。那么,为什么你不只是得到信息和做一个foreach? –

+0

如果您要用查询中的数据填充循环,然后在查询浪费时间之前进行计数,并且可能不正确(例如,在count和select之间插入一行),则只需计算返回的行数数据查询, – MikeT

回答

5

for循环的条件下不要调用您的A方法 - 它将在每次迭代中执行。

int count = A(); 
for (int i = 0; i < count; i++) 
{ 
    System.Web.UI.HtmlControls.HtmlGenericControl createDiv = ... 
} 

public int A() 
{ 
    ... 
    using (... 
    using (... 
    { 
     ... 
     return count; 
    } 
} 
+0

很好的建议,但你掩饰你改变了'A()'的返回类型,这是你所做的修改他的问题 – MikeT

2

在这种情况下,只是让A()回报int,而不是void

public int A() { 
    int count = 0; 
    //do db stuff 
    return count; 
} 

然后在您的循环:

int shipCount = A(); 

for (int i = 0; i < shipCount; i++) { 
    //make div 
} 
+0

“更干净”的实际改变?如果他不这样做会是一场灾难。 – Igor

+0

@Igor我看到你的编辑 - 我不知道!我会删除那个位 – levelonehuman

+0

@Igor Disaster强烈地说,虽然我可以同意 – MikeT

1

太多的东西,说^^” 首先,如果您需要显示表AlgSchipInfo中元素的信息,只需在数据表中具有计数或选择这些数据之后选择这些数据即可其他东西像一个ORM。

当您从数据库获取数据表时,将其绑定到重排器或其他能源以列出您的项目。它会比从头IMAO更有效率。

如果你有欢迎您更具体的问题;)