在ASP页面中选择*不会带回一些字段

时间:2016-03-25 14:06:21

标签: sql select asp-classic

很奇怪。我正在使用连接到SQL Server 2008 R2数据库的经典ASP页面。我在本地计算机上托管数据库。我正在使用查询

SELECT * FROM dbo.screening WHERE ID = 21221;

我需要使用以下代码显示2个字段:

  <input type="text" id="county_name" name="county_name" size="60" value="<%=(Recordset1.Fields.Item("county_name").Value)%>">
  <input type="text" name="addresssdsd" id="addresszxas" size="49" value="<%=(Recordset1.Fields.Item("address").Value)%>"> 

字段地址显示为空白。 County_name正确显示。但是,当我显示地址字段FIRST时,两者都正常显示。我发现地址字段位于筛选表属性中的county_name字段之前。现在如果我在county_name字段之后设置地址字段,它将正确显示。好像asp页面只会按照它们的设置顺序显示。

当使用代码SELECT county_name,address FROM screening(逐个地逐字地调用字段)时,无论我首先选择哪个字段,这都能正常工作。

任何帮助将不胜感激。

以下是连接字符串:

connectstr="DRIVER={SQL Server};SERVER=(local);UID=SA;PWD=pw111;DATABASE=Nceee"
Set oConn = Server.CreateObject("ADODB.Connection")

1 个答案:

答案 0 :(得分:1)

以下是我推荐的内容(这适用于任何地方,而不仅仅适用于ASP):

  1. 原则上,永远不要select *。拼出您要选择的字段。这减轻了数据库服务器的负担,为查询优化提供了便利,有助于在读取ASP代码时保护它在数据库模式因某种原因发生变化时不会全部破坏。

    SELECT address, county_name FROM dbo.screening WHERE ID = 21221;
    
  2. 永远不要从连接字符串构建SQL。使用ADODB.CommandADODB.Parameter个对象。这可以保护您免受SQL注入和由于意外参数格式导致的运行时错误的影响,并有助于加快循环中运行的查询。

    SELECT address, county_name FROM dbo.screening WHERE ID = ?;
    
  3. 永远不要将值输出到HTML未编码。使用Server.HTMLEncode()。您可以创建一个辅助函数来执行它,因此您必须键入do less typing:

    Function v(rs, name)
        On Error Resume Next
        v = Server.HTMLEncode(Nz(rs.Fields(name).Value))
        If Err.Number <> 0 Then
            v = Server.HTMLEncode(Err.Description)
        End If
    End Function
    
    Function Nz(val)
        If IsNull(val) Then Nz = "" Else Nz = val
    End Function
    
  4. 因此...

    <input type="text" id="county_name" name="county_name" size="60" value="<%=v(Recordset1, "county_name")%>">
    <input type="text" name="address" id="address" size="49" value="<%=v(Recordset1, "address")%>">