很奇怪。我正在使用连接到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")
答案 0 :(得分:1)
以下是我推荐的内容(这适用于任何地方,而不仅仅适用于ASP):
原则上,永远不要select *
。拼出您要选择的字段。这减轻了数据库服务器的负担,为查询优化提供了便利,有助于在读取ASP代码时保护它在数据库模式因某种原因发生变化时不会全部破坏。
SELECT address, county_name FROM dbo.screening WHERE ID = 21221;
永远不要从连接字符串构建SQL。使用ADODB.Command和ADODB.Parameter个对象。这可以保护您免受SQL注入和由于意外参数格式导致的运行时错误的影响,并有助于加快循环中运行的查询。
SELECT address, county_name FROM dbo.screening WHERE ID = ?;
永远不要将值输出到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
因此...
<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")%>">