Asp.net ASP查询返回
我有这个ASP页面。我正在尝试显示metalquery的结果,列出所有订单号。当我现在这样做时,它只显示第一个订单号。是否有方法显示查询中的所有订单号Asp.net ASP查询返回,asp.net,sql,Asp.net,Sql,我有这个ASP页面。我正在尝试显示metalquery的结果,列出所有订单号。当我现在这样做时,它只显示第一个订单号。是否有方法显示查询中的所有订单号 <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Data.Odbc" %> <!DOCTYPE html PUBLIC "-//W3C//DTD
<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data.Odbc" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- webkit5 includes --!>
<!-- <meta content="yes" name="apple-mobile-web-app-capable" /> --!>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta content="minimum-scale=1.0, width=device-width, maximum-scale=0.6667, user-scalable=no" name="viewport" />
<link href="css/style.css" rel="stylesheet" media="screen" type="text/css" />
<script src="javascript/functions.js" type="text/javascript"></script>
<title>Open Inkjet Orders</title>
<meta content="keyword1,keyword2,keyword3" name="keywords" />
<meta content="Description of your page" name="description" />
</head>
<body>
<div id="topbar" class="transparent">
<div id="leftnav">
<a href="Home.aspx">
<img alt="home" src="images/home.png">
</a>
<a href="OpenOrders.aspx">Open Orders</a>
</div>
</div>
<div id="content">
<%
OdbcConnection cn;
OdbcCommand cmd;
String canvasQuery = "select count(distinct(info.orderid)) from orderinfo info, orderiteminfo item where info.orderstatus = 'Open' and info.orderid = item.orderid and item.deptcode in (35) and info.duedate = DATE(NOW())";
String wallWrapQuery = "select count(distinct(info.orderid)) from orderinfo info, orderiteminfo item where info.orderstatus = 'Open' and info.orderid = item.orderid and item.deptcode in (41) and info.duedate = DATE(NOW())";
String fineartQuery = "select count(distinct(info.orderid)) from orderinfo info, orderiteminfo item where info.orderstatus = 'Open' and info.orderid = item.orderid and item.deptcode in (03) and info.duedate = DATE(NOW())";
String metalQuery = "select distinct(info.orderid) from orderinfo info, orderiteminfo item where info.orderstatus = 'Open' and info.orderid = item.orderid and item.deptcode in (48) and info.duedate = DATE(NOW())";
int canvasOpen, wallWrapOpen, fineartOpen, metalOpen;
cn= new OdbcConnection("dsn=xxxx;UID=xxxx;PWD=xxxx");
cmd=new OdbcCommand(canvasQuery,cn);
cn.Open();
OdbcDataReader DbReader = cmd.ExecuteReader();
DbReader.Read();
canvasOpen = DbReader.GetInt32(0);
cmd=new OdbcCommand(wallWrapQuery,cn);
DbReader = cmd.ExecuteReader();
DbReader.Read();
wallWrapOpen = DbReader.GetInt32(0);
cmd=new OdbcCommand(fineartQuery,cn);
DbReader = cmd.ExecuteReader();
DbReader.Read();
fineartOpen = DbReader.GetInt32(0);
cmd=new OdbcCommand(metalQuery,cn);
DbReader = cmd.ExecuteReader();
DbReader.Read();
metalOpen = DbReader.GetInt32(0);
DbReader.Close();
cn.Close();
%>
<span class="graytitle">Due Inkjet Orders</span>
<ul class="pageitem">
<li class="menu">
<span class="name">Canvas Dept: <%=canvasOpen%></span>
</li>
<li class="menu">
<span class="name">Wall Cling Dept: <%=wallWrapOpen%></span>
</li>
<li class="menu">
<span class="name">Fine Art Dept: <%=fineartOpen%></span>
</li>
<li class="menu">
<span class="name">Metal Dept: <%=metalOpen%></span>
</li>
<li>
</li>
</ul>
</div>
</body>
</html>
必须一直调用Read()方法,直到它返回false
每个Read()调用只返回一条记录
试试这个:
while(DbReader.Read())
{
metalOpen = DbReader.GetInt32(0);
%>
<span class="graytitle">Due Inkjet Orders</span>
<ul class="pageitem">
<li class="menu">
<span class="name">Canvas Dept: <%=canvasOpen%></span>
</li>
<li class="menu">
<span class="name">Wall Cling Dept: <%=wallWrapOpen%></span>
</li>
<li class="menu">
<span class="name">Fine Art Dept: <%=fineartOpen%></span>
</li>
<li class="menu">
<span class="name">Metal Dept: <%=metalOpen%></span>
</li>
<li>
</li>
</ul>
</span>
%>
}
DbReader.Close();
cn.Close();
while(DbReader.Read())
{
metalOpen=DbReader.GetInt32(0);
%>
到期喷墨订单
-
帆布部:
-
贴墙部:
-
美术系:
-
金属部:
-
%>
}
DbReader.Close();
cn.Close();
您需要添加一个循环来读取多条记录(并将metalOpen更改为列表来存储多个值:
List<int> metalOpen = new List<int>();
cmd=new OdbcCommand(metalQuery,cn);
DbReader = cmd.ExecuteReader();
while(DbReader.Read())
{
metalOpen.Add(DbReader.GetInt32(0));
}
List metalOpen=new List();
cmd=新的OdbcCommand(metalQuery,cn);
DbReader=cmd.ExecuteReader();
while(DbReader.Read())
{
metalOpen.Add(DbReader.GetInt32(0));
}
然后决定如何显示它们-最简单的方法是显示逗号分隔的列表:
<li class="menu">
<span class="name">Metal Dept: <%=string.Join(", ",metalOpen)%></span>
</li>
金属部:
以下查询位于代码块的开头,指定一个查询,该查询可能返回零条、一条或多条记录,更准确地说是orderid
字段:
String metalQuery = "select distinct(info.orderid) from orderinfo info, orderiteminfo item where info.orderstatus = 'Open' and info.orderid = item.orderid and item.deptcode in (48) and info.duedate = DATE(NOW())";
此块正在对源数据库执行此查询:
cmd=new OdbcCommand(metalQuery,cn);
DbReader = cmd.ExecuteReader();
现在,您需要迭代每个结果。您可以通过使用.Read()
方法来完成此操作。最妙的是,.Read()
可以在结果集中有记录的情况下使用
然后,您可以将.Read()
迭代封装到While块上:
while(DbReader.Read())
{
//Here goes your code
}
在您的情况下,它可能如下所示:
while(DbReader.Read())
{
metalOpen = DbReader.GetInt32(0);
%>
<span class="name">Metal Dept: <%=metalOpen%></span>
<%
}
while(DbReader.Read())
{
metalOpen=DbReader.GetInt32(0);
%>
金属部:
您考虑在dbReader中循环浏览记录,而不是只显示第一个记录?您只显示1个值,因为这是您从代码中获得的全部内容。我建议使用一个转发器或某种ASP.NET控件,可以通过数据绑定显示查询结果。