2014-09-26 66 views
0

參照這個:String issues. Format "First Last" to format "Last, First" with a twist正則表達式和字符串,我如何修復'在字符串中?

我對mos的名字有很好的功能。然而,我被困在名字中,在他們中間,即:O'Shane。我循環訪問數據集,將名稱傳遞給函數以修復它,然後返回固定名稱。但是,如果字符串中有'in',則會擾亂SQL語句。

下面是相關代碼:

strSql = ("update tbl set Name=" & "'" & strNewName & "'" & " where ID= " & "'" & ID & "'") 

strNewName = NameFix(strName) 

Public Function NameFix(ByVal strOriginalName As String) As String 
Dim regex As New Regex("(?:(?:mr\.|miss|mrs|ms|by)\s+)?(\S+).*(?<=\s)(\S+)$", RegexOptions.IgnoreCase) 
     Dim strNewName As String = regex.Replace(strOriginalName, "$2, $1") 
     Return strNewName 

我如何讓過去的「在名字?

tia!

回答

2

使用SQL參數 - 不要將用戶輸入的值放在SQL語句中有史以來。這是一個稱爲SQL注入的巨大安全漏洞。

儘管您可以用''替換每個'以避免引用,但這仍然是一種不好的做法。使用SQL參數可讓服務器優化並緩存查詢計劃,以便在不同參數下重複使用。

您的查詢應該是這樣的:

UPDATE tbl SET Name = @newName WHERE ID = @id 

然後,如果你使用ADO.NET您添加值到SqlCommand.Parameters集合。

+0

感謝上'一個替代!好建議。我並不關心注入攻擊,因爲它不需要用戶輸入,它不是一個Web應用程序。另外,這只是對我來說,沒有其他人會使用它。所以,我甚至沒有想到使用參數作爲修復。 – JimB 2014-10-01 00:45:55

+0

@JimB習慣參數並且每次都使用它們。過了一段時間,你甚至不會再考慮字符串連接作爲可能的選項。即使你不關心安全性,查詢計劃緩存本身也應該是一個足夠好的理由。 – 2014-10-01 07:44:11

+0

再次感謝。我打算使用PostgresQL數據庫(現在只使用訪問數據庫進行測試),不確定參數使用或查詢緩存是否與postgresql有關係 - 思路? – JimB 2014-10-02 01:25:15

0

轉義序列的'字符添加另一個'這樣做''