Javascript 隐藏<;TR>;基于记录集空值的标记

Javascript 隐藏<;TR>;基于记录集空值的标记,javascript,sql-server-2005,asp-classic,Javascript,Sql Server 2005,Asp Classic,我正在使用MicrosoftSQLServer2005存储过程在HTML表中发布记录。在HTML表中,我有以下字段的行:条目#、打开日期、说明和所有者 有时,db表中的所有者字段将为空。发生这种情况时,我有ASP response.write“N/A”在对应于所有者的HTML表行中。然而,我想避免这种情况,因为这似乎是多余的。相反,如果数据库中的owner字段为NULL,我希望有一种方法可以消除表行altoGether。我该怎么做呢?我正在使用Javascript、经典ASP和SQLServer

我正在使用MicrosoftSQLServer2005存储过程在HTML表中发布记录。在HTML表中,我有以下字段的行:条目#、打开日期、说明和所有者

有时,db表中的所有者字段将为空。发生这种情况时,我有ASP response.write“N/A”在对应于所有者的HTML表行中。然而,我想避免这种情况,因为这似乎是多余的。相反,如果数据库中的owner字段为NULL,我希望有一种方法可以消除表行altoGether。我该怎么做呢?我正在使用Javascript、经典ASP和SQLServer2005。我的代码如下。注意——我对这一切都是个新手。谢谢

'Declare Variables
Dim CN, RS, vOutputType, vSQL, vNumber, vOwner

'Connection from includes file
Set CN = GetDataConnection

vOutputType = Request.QueryString("ot")

If Request.QueryString("txtNumber") <> "" Then
vNumber = Rtrim(Request.QueryString("txtNumber"))
End If

If Request.QueryString("cboOwner") <> "" Then
    vOwner = Rtrim(Request.QueryString("cboOwner"))
End If

If vNumber <> "" Or vOwner <> "" Then

vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"

Set RS = CN.Execute(vSQL)

If IsObject(RS) Then
    If Not RS.EOF Then%>    
        <table class="WebApps">
            <tr>
                <td width="5%"><h3>Entry #</h3></td>
                <td width="5%"><h3>Open Date</h3></td>
                <td width="5%"><h3>Description</h3></td>
                <td width="5%"><h3>Owner</h3></td>      
            </tr>

            <%RS.MoveFirst
            Do While Not RS.EOF
                %>              
                <tr>
                    <td><p><%= RS("ID")%></p></td>
                    <td><p><%= RS("OpenDate")%></p></td>
                    <td><p><%= RS("Description")%></p></td> 
                    <td><p><%If (RS("OwnerName")) <> "" Then Response.Write(RS("OwnerName")) Else Response.Write("N/A")%></p></td>
                </tr>
                <%RS.MoveNext
            Loop%>          
        </table>    
<%End If
End If

'Close objects
Set RS = NOTHING
CN.Close
Set CN = Nothing    
“声明变量
Dim CN、RS、vOutputType、vSQL、vNumber、vOwner
'从包含文件的连接
Set CN=GetDataConnection
vOutputType=Request.QueryString(“ot”)
如果Request.QueryString(“txtNumber”)“”则
vNumber=Rtrim(Request.QueryString(“txtNumber”))
如果结束
如果Request.QueryString(“cboOwner”)“”则
vOwner=Rtrim(Request.QueryString(“cboOwner”))
如果结束
如果vNumber“”或vOwner“”,则
vSQL=“spReport”
vSQL=vSQL&“@vNumber=”&vNumber&“,”
vSQL=vSQL&@vOwner='&vOwner&''
设置RS=CN.Execute(vSQL)
如果是IsObject(RS),则
如果不是RS.EOF,则%>
入口#
开放日期
描述
所有者


最好在SQL查询本身中过滤掉包含空值的行,但如果由于某种原因不能过滤掉,只需将if语句上移一点,这样如果不满足条件,就不会首先写出表行:


最好过滤掉SQL查询本身中包含空值的行,但如果由于某种原因不能过滤掉,只需将if语句上移一点,这样如果不满足条件,就不会首先写出表行:


过滤源当然更好,只需选择OwnerName不为“”的记录

否则,您可以使用您的代码并对其进行轻微修改

发件人:




还没有测试代码,但应该会有所帮助。

过滤源代码当然更好,只需选择OwnerName不为“”的记录

否则,您可以使用您的代码并对其进行轻微修改

发件人:




还没有测试过代码,但应该会有所帮助。

您可以通过两种方式进行测试

1) 前端:检查所有者字段中的空值,如下所示

If Not (IsNull(rsNew("Owner")) Then
      <table class="WebApps">
      ...........
End If
如果不是(IsNull(rsNew(“所有者”)),则
...........
如果结束
2) 后端:


使用WHERE子句过滤存储过程中的空值。

您可以通过两种方式进行过滤

1) 前端:检查所有者字段中的空值,如下所示

If Not (IsNull(rsNew("Owner")) Then
      <table class="WebApps">
      ...........
End If
如果不是(IsNull(rsNew(“所有者”)),则
...........
如果结束
2) 后端:

使用WHERE
子句过滤存储过程中的空值。

因为您是一个“完全的新手”,这里还有一些建议

SQL注入攻击

您的代码:-

vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"

Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td> 
不要这样做。有人可以创建查询字符串以在服务器上执行任意SQL:-

?txtNumber=30&cboOwner='; arbitary SQL code here ; --
您应该始终使用ADODB.Command对象来执行需要从客户端检索参数值的SQL。Web搜索“SQL注入ASP”

空值的含义

你似乎对NULL的含义有点困惑。“db表中的所有者字段将为NULL”,但您的代码正在测试“”。Null与空字符串不同。实际为空的字段将不等于“”

使用Server.HTMLEncode

您的代码:-

vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"

Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td> 
你的实际问题

不要试图在ASP页面中使用VBScript来完成SQL应该完成的工作。 使用WHERE子句修改SQL:-

 WHERE Owner IS NOT NULL
或者,如果您不确定所有者是为NULL还是为空字符串:-

WHERE Owner IS NOT NULL AND Owner <> ""
其中所有者不为NULL且所有者“”
既然你是一个“完全的新手”,这里还有一些建议

SQL注入攻击

您的代码:-

vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"

Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td> 
不要这样做。有人可以创建查询字符串以在服务器上执行任意SQL:-

?txtNumber=30&cboOwner='; arbitary SQL code here ; --
您应该始终使用ADODB.Command对象来执行需要从客户端检索参数值的SQL。Web搜索“SQL注入ASP”

空值的含义

你似乎对NULL的含义有点困惑。“db表中的所有者字段将为NULL”,但您的代码正在测试“”。Null与空字符串不同。实际为空的字段将不等于“”

使用Server.HTMLEncode

您的代码:-

vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"

Set RS = CN.Execute(vSQL)
<td><p><%= RS("Description")%></p></td> 
你的实际问题

不要试图在ASP页面中使用VBScript来完成SQL应该完成的工作。 使用