Решение Роба Стивенсона-Леггета медленное, потому что он не связывает свои значения, а использует string.Format ().
Когда вы просите Oracle выполнить инструкцию sql, она начинается с вычисления значения has этого оператора. После этого он смотрит в хеш-таблицу, знает ли он уже этот оператор. Если он уже знает свой оператор, он может извлечь свой путь выполнения из этой хеш-таблицы и выполнить этот оператор очень быстро, потому что Oracle выполнял этот оператор раньше. Это называется библиотечным кешем, и он не работает должным образом, если вы не связываете свои операторы sql.
Например, не делайте:
int n;
for (n = 0; n < 100000; n ++)
{
mycommand.CommandText = String.Format("INSERT INTO [MyTable] ([MyId]) VALUES({0})", n + 1);
mycommand.ExecuteNonQuery();
}
, но делайте:
OracleParameter myparam = new OracleParameter();
int n;
mycommand.CommandText = "INSERT INTO [MyTable] ([MyId]) VALUES(?)";
mycommand.Parameters.Add(myparam);
for (n = 0; n < 100000; n ++)
{
myparam.Value = n + 1;
mycommand.ExecuteNonQuery();
}
Неиспользование параметров также может вызвать sql инъекции.
Используйте FtpWebRequest
с методом WebRequestMethods.Ftp. MakeDirectory
.
Например:
using System;
using System.Net;
class Test
{
static void Main()
{
WebRequest request = WebRequest.Create("ftp://host.com/directory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("user", "pass");
using (var resp = (FtpWebResponse) request.GetResponse())
{
Console.WriteLine(resp.StatusCode);
}
}
}
Примерно так:
// remoteUri points out an ftp address ("ftp://server/thefoldertocreate")
WebRequest request = WebRequest.Create(remoteUri);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
WebResponse response = request.GetResponse();
(немного поздно. Как странно)