2011-01-07 165 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的不好方法,正如其他人提到的一样。