我有以下代码,它会生成插入查询
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
如何修改上述代码才能执行此操作?
答案 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对象。这有两个方面的帮助:
答案 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的一种不好的方法。