2009-11-06 25 views
1

我正在使用Microsoft SQL Server 2005存儲過程在HTML表中發佈記錄。在HTML表格中,我有以下字段的行:entry#,打開日期,描述和所有者。隱藏<TR>基於Recordset的標記NULL值

有時,db表中的owner字段將爲NULL。發生這種情況時,我在對應於所有者的HTML表格行中有ASP response.write「N/A」。不過,我想避免這種情況,因爲它看起來多餘。相反,我希望有一種方法可以在數據庫中的所有者字段爲NULL時刪除該表中的所有行。我會如何去做這件事?我正在使用JavaScript,經典的ASP和SQL Server 2005.我的代碼如下。注 - 我完全是新手。謝謝。

'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  

回答

1

這是最好的過濾掉包含在SQL查詢本身NULL值的行,但如果你因爲某些原因,只是將你的IF語句了一下所以如果條件不滿足,不表行首先寫出:

<%如果(RS( 「OWNERNAME」))<> 「」 然後回覆於( 「<TR> <TD>」 &「</TD > </tr >「)%>

+0

我選擇了做這個選項。精美的作品。謝謝! – SeanFlynn 2009-11-06 20:35:45

+0

@baldwingrand:如果這是你接受的答案,那麼你應該通過點擊左邊的大勾來表明你的接受。 – AnthonyWJones 2009-11-07 15:46:50

1

過濾源當然更好,只需選擇記錄,其中OWNERNAME是不是「」

否則,你可以用你的一些代碼,並稍微修改

<%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%> 

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

未測試代碼,但它應該幫助。

0

你可以用兩種方法做到這一點。

1)前端:檢查Owner字段中的NULL值,如下所示。

If Not (IsNull(rsNew("Owner")) Then 
     <table class="WebApps"> 
     ........... 
End If 

2)後端:在您的存儲過程

過濾NULL值使用WHERE子句

5

既然你是一個「總新手」,這裏有一些其他建議。

SQL注入攻擊

您的代碼: -

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

Set RS = CN.Execute(vSQL) 

不這樣做。有人可以創建一個查詢字符串以在您的服務器上執行任意SQL: -

?txtNumber=30&cboOwner='; arbitary SQL code here ; -- 

您應該始終使用ADODB。Command對象執行需要從客戶端獲取參數值的SQL。網絡搜索「SQL注入ASP」

NULL

的意思你好像有點困惑NULL的含義。 「db表中的所有者字段將爲NULL」,但您的代碼正在測試<>「」。空不與空字符串相同。實際上NULL的字段不會等於「」。

使用Server.HTMLEncode

您的代碼: -

<td><p><%= RS("Description")%></p></td> 

如果說明字段包含<&字符會發生什麼?更糟糕的是,如果說明字段中的數據來自Web客戶端上的數據輸入,它可能包含Javascript注入嘗試。始終使用的字符串數據Server.HTMLEncode被髮送到客戶端: -

<td><p><%= Server.HTMLEncode(RS("Description"))%></p></td> 

您的實際問題

不要受到誘惑而使用VBScript在ASP頁面做的工作是SQL應正在做。 Modifiy您的SQL用WHERE子句: -

WHERE Owner IS NOT NULL 

,或者如果你不知道老闆是否會NULL或空字符串: -

WHERE Owner IS NOT NULL AND Owner <> ""