格式化字符串

时间:2011-01-07 16:25:35

标签: .net asp.net sql vb.net

我有以下代码,它会生成插入查询

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

如何修改上述代码才能执行此操作?

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

如果可能的话,不要以这种方式编写SQL - 尝试使用带参数的SqlCommand对象。这有两个方面的帮助:

  • 负责报价/空间 逃避等
  • 有助于防范SQL 注射攻击

答案 2 :(得分:1)

您可以通过编写new Uri(path).AbsoluteUri将其转换为该格式。

正如其他人提到的,使用参数

答案 3 :(得分:1)

我不明白查询是如何与您的问题相关的。似乎更像是对我的分心。

无论如何,您可以使用s.Replace(“”,“%20”)。

你也可以使用HttpUtility.UrlEncode,但它会编码除空格之外的其他字符。

答案 4 :(得分:1)

我认为这就像继续使用 string .Replace( string string )调用一样简单:

   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的一种不好的方法。