phil.o
Первая часть: есть гораздо более простой способ:
string qamm = "Guide,Transport";
var list = new List<string>(qamm.Split(','));
Только две строчки, и то
Split()
метод вызывается только один раз.
Как правило, вы не хотите вызывать этот метод в цикле, когда вы можете сделать это только один раз и сохранить его результат в переменной.
Вторая часть: мне трудно понять, что вы хотите получить здесь. Содержимое объекта DataTable будут заменены на каждый последующий звонок
Fill
Кроме того, вы не должны создавать SQL-запросы путем объединения строк, поскольку вы оставляете свое приложение открытым для атак SQL-инъекций. Вместо этого лучше использовать параметризованные запросы. Вы также должны избегать
SELECT *
как можно больше, но достаточно четко укажите столбцы, которые вы хотите. Кроме того, вы должны дать переменным некоторые значимые имена и оставаться согласованными с корпусом имен методов. Вы также должны использовать одноразовые объекты (соединения, команды) в
using
блоки, чтобы правильно освободить ресурсоемкие объекты, когда они вам больше не нужны.
d123.CONNECTER();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = d123.con;
// Build command string
var builder = new StringBuilder("SELECT * FROM whats_included WHERE Title_of_whats_in IN (");
for (int i = 0; i < list.Count; ++i)
{
builder.Append($"@cat{i},");
}
builder.Remove(builder.Length - 1, 1); //Remove the last comma
builder.Append(")");
cmd.CommandText = builder.ToString();
// Add parameters
for (int i = 0; i < list.Count; ++i)
{
cmd.Parameters.Add($"@cat{i}", SqlDbType.NVarChar).Value = list[i];
}
// Create the adapter using prepared command
d123.dap = new SqlDataAdapter(cmd);
// Fill the table
d123.dap.Fill(d123.dt);
}
d123.DECONNECTER();
Этот код должен заполнить вашу таблицу строками отфильтрованными по значениям в оригинале
qamm
строка.