2011-01-07 162 views
0

我有以下代碼,從而產生插入查詢格式化的字符串

For Each f As String In Directory.GetFiles(d) 
    objSQLStringBuilder.Append("insert into table1 (full_path, file_name) values ('" & f.Replace("'", "''") & "', '" & f.Remove(0, Len(d) + 1).Replace("'", "''") & "');") 
Next 

然而,它找到的路徑我需要如下

格式化路徑格式如下

c:\program files\microsoft office\winword.exe 

file:///c:/program%20files/microosoft%20office/winword.exe 

我該如何修改上面的代碼來做到這一點?

+3

它從來不是一個好主意,「生成插入查詢」,特別是使用用戶輸入 – 2011-01-07 16:27:18

回答

4

正如m.edmondson指出的那樣,使用命令參數要好得多。

這裏的基本思想是:

sql = "INSERT INTO TABLE1 (full_path, file_Name) values (@full_path, @file_name)"; 

param = new SqlParameter("@full_path", varchar, 255); 
param.Value = fullPath; 

//add param for file name 

command.Parameters.Add("@full_path"); 

command.ExecuteNotQuery(sql); 
2

不要用這種方式編寫你的SQL,如果可能的話 - 嘗試並使用帶有參數的SqlCommand對象。這有助於在兩個方面:

  • 發生逃逸等報價/空間 照顧
  • 有助於防止SQL注入 攻擊
1

您可以通過編寫new Uri(path).AbsoluteUri將其轉換爲格式。

正如其他人提到的,使用參數

1

我不明白查詢是如何與您的問題相關的。看起來更像是對我的分心。

無論如何,您可以使用s.Replace(「」,「%20」)。

您也可以使用HttpUtility.UrlEncode(s),但它將對空格以外的字符進行編碼。

1

我認爲這是繼續你已經用字符串 .Replace()做簡單的調用:

For Each f As String In Directory.GetFiles(d) 
     objSQLStringBuilder.Append("insert into intranet.dbo.noticeboard (full_path, file_name) values ('" & "file:///" + f.Replace("'", "''").Replace(" ", "%20").Replace("\", "/") & "', '" & f.Remove(0, Len(d) + 1).Replace("'", "''") & "');") 
    Next 

此外,這是一種寫入SQL的不好方法,正如其他人提到的一樣。