2010-06-11 59 views
1

我想創建條件來更新我的表,如果已經有相同的數據(在同一列)插入表中。如何使條件更新表?

IM使用

If String.ReferenceEquals(hotel, hotel) = False Then 

     insertDatabase() 
    Else 
     updateDatabase() 

    End If 

這是updateDatabase()的代碼...

Dim sql2 As String = "update infoHotel set nameHotel = N" & FormatSqlParam(hotel) & _ 
                 ", streetAddress = N" & FormatSqlParam(StreetAddress) & _ 
                 ", locality = N" & FormatSqlParam(Locality) & _ 
                 ", postalCode = N" & FormatSqlParam(PostalCode) & _ 
                 ", country = N" & FormatSqlParam(Country) & _ 
                 ", addressFull = N" & FormatSqlParam(address) & _ 
                 ", tel = N" & FormatSqlParam(contact) & _ 
                 "where hotel = '" & hotel & "')" 

這是formatSqlParam()代碼:

Function FormatSqlParam(ByVal strParam As String) As String 

    Dim newParamFormat As String 

    If strParam = String.Empty Then 
     newParamFormat = "'" & "NA" & "'" 
    Else 
     newParamFormat = strParam.Trim() 
     newParamFormat = "'" & newParamFormat.Replace("'", "''") & "'" 
    End If 

    Return newParamFormat 

End Function 

功能設法去到updateDatabase(),但有一些錯誤說

「東方'附近語法不正確。」

東方是插入在表中的數據。它適合使用ReferenceEquals嗎?

用vb.net和SQL database..tq

+0

1)向我們展示'updateDatabase()'的代碼。 2)這種比較總是**是「真實的」。 – egrunin 2010-06-11 03:05:07

回答

0

您的數據單引號,如IM:

Oriental's 

顯示我們FormatSqlParam()碼 - 錯誤可能是在那裏。

要不你離開了周圍的酒店名稱的單引號:

where hotel = '" & hotel & "')" 

我希望這它,因爲這意味着你使用的名稱作爲關鍵字,一個非常糟糕的主意。

1

您應該使用參數化查詢,而不是連接字符串,像這樣:

Dim sql2 As String = "Update InfoHotel" _ 
    & "Set nameHotel = @nameHotel" _ 
    & ", knownAs1 = @knownAs1" _ 
    & ", knownAs2 = @knownAs2" _  
    & ", knownAs3 = @knownAs3" _  
    & ", knownAs4 = @knownAs4" _ 
    & " Where hotel = @hotel" 

如果您使用參數化查詢,你就不必擔心試圖做報價更換,並可能引入一個SQL注入漏洞。