【问题标题】:A difficult to access DB from ASP.net code从 ASP.net 代码中难以访问的数据库
【发布时间】:2012-12-30 15:43:58
【问题描述】:

我有以下代码:

sql="SELECT  COUNT(*) AS CurrentInvoice from [Invoices].[dbo].[InvoiceSentInformation] WHERE (InvoiceSeries = 18) AND (InvoicePeriodStartDate='"&SelectedMonth&"') AND (CustomerBillingGroupId IN (2, 3, 11))" 
Response.Write SelectedMonth
'Response.Write sql
r.open sql,c_SQL,3,3
IF r.recordcount>0 THEN
    CurrentInvoice=r("CurrentInvoice")
    for i=1 to r.recordcount
   %>
       <TR align="center">
        <TD><%=CurrentInvoice%></TD>
        <TD>
         <%


  %>

输出为:0。

当我在我的 sql-server 中运行查询时,结果是一个 > 15,000 的数字。
如何修复我的代码以显示与我在数据库中看到的相同的输出?

【问题讨论】:

  • 你确定你正在对同一个数据库运行查询?代码看起来不错。 (这是 asp 经典吗?它可能是 vb.net,但感觉像 asp 经典)。检查您的查询字符串,如果您的组织是典型的,则可能有一个 dev、staging、prod db 都略有不同。
  • SelectedMonth 的值是多少?如果是日期,则格式可能是错误的文化(31/12/12 vs 12/31/12)

标签: asp.net html sql-server


【解决方案1】:

在您的 for 循环中,您似乎从 1 循环到 r.recordcount。 这意味着没有进入 for 循环,因此没有显示任何内容。

您是否尝试过只显示 CurrentInvoice 而没有 for 循环? 然后应该只显示来自 SQL 的计数

【讨论】:

  • 记录计数应始终为一,因为唯一的表达式是聚合,因此循环应该执行一次,但我同意应该删除 for 语句。
  • 嘿,感谢大家的帮助,我应该添加:
【解决方案2】:

如上所述,您应该删除 for 循环 - 当您从表中选择聚合()时,结果将始终为一行,即使表为空。

可能你只是在 sn-p 中排除了它,但是要显示一个表格,它需要正确的格式。看起来上面可能会打开并且永远不会关闭 .第二个应该是一个吗?

我建议查看 HTML 输出的源代码,这样您就可以看到我编写的所有代码。我怀疑你归因于​​上面的零可能来自其他地方,上面可能没有输出任何可见的东西(没有查看源)。

至于 SQL,仅供参考,您可以通过使用 count(1) 而不是 count(*) 看到性能改进 - 后者仍然让 SQL 检查所有列的元数据。

【讨论】:

  • 嘿,感谢大家的帮助,我应该添加:
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多