Замена слов в двух строках

242
22 марта 2018, 06:23

Есть две переменные типа string:

st="UPDATE КИ SET Дополнительная_информация = 'One', График_интеграл = 2, Размер_пикселя = 3 WHERE Дополнительная_информация IS NULL;"
st2="testovaia zapis, 23, 57";

Строка st будет оставаться неизменной, а три параметра строки st2 будут меняться. Мне необходимо заменить слово One на testovaia zapis, 2 на 23 и соответственно 3 на 57 (или на любые другие слова и числа, которые будут на данный момент записаны в переменную). Предполагаю, что можно решить проблему так:

        string d = "";
        string f = "";
        string h = "";
st.Replace("one", d);
st.Replace("2", f);
st.Replace("3", h);

Но как сделать так, чтобы значения из строки st2 записывались в переменные? Заранее спасибо.

Изменил код, взяв за основу ответы ниже:

string st2= textBox3.Text;
        OleDbCommand st = new OleDbCommand("UPDATE КИ SET Дополнительная_информация = @DopInf, График_интеграл = @GrafikIntegral, Размер_пикселя = @RazmerPikselja WHERE Дополнительная_информация IS NULL;");
        st.Parameters.AddWithValue("@DopInf", st2.Split(",")[0].Trim());
        st.Parameters.AddWithValue("@GrafikIntegral", st2.Split(",")[1].Trim());
        st.Parameters.AddWithValue("@RazmerPikselja ", st2.Split(",")[2].Trim());
        st.ExecuteNonQuery();
Answer 1

Легче и правилнее будет с параметризированным запросом:

SqlCommand st=  new SqlCommand("UPDATE КИ SET Дополнительная_информация = @DopInf, График_интеграл = @GrafikIntegral, Размер_пикселя = @RazmerPikselja WHERE Дополнительная_информация IS NULL;");
st.Parameters.AddWithValue("@DopInf", st2.Split(',')[0].Trim());
st.Parameters.AddWithValue("@GrafikIntegral", st2.Split(',')[1].Trim());
st.Parameters.AddWithValue("@RazmerPikselja ", st2.Split(',')[2].Trim());
Answer 2

Если вы можете изменять st, тогда запишите её как

st="UPDATE КИ SET Дополнительная_информация = '{1}', График_интеграл = {1}, Размер_пикселя = {1} WHERE Дополнительная_информация IS NULL;"

и сможете использовать string.Format.

Чтобы разбить st2 на параметры, используйте string.Split():

  var parameters = st2.Split(',');

Не забудьте вызвать Trim() для всех полученных значений, чтобы удалить пробелы.

Точно также поступите с st:

 var queryFormats = st.Split(',');

Теперь у вас две переменные: одна содержит массив форматов, другая массив параметров для них. Дальше просто сливаем их в одну строку

 var rez = string.Empty;
 for(int i=0;i<queryFormats.Count;i++)
 {
       rez += string.Format(queryFormats[i], parameters[i]);
 }

Не забудьте проверять оба массива на длину - она должна быть одинакова, иначе не сойдётся и вы получите либо незамененный формат, либо ArgumentOutOfRangeException.

Но лучше всего скомбинировать мой и соседний ответ и использовать параметры.

READ ALSO
C# Threading Запустить метод из потока UI [дубликат]

C# Threading Запустить метод из потока UI [дубликат]

На данный вопрос уже ответили:

201
Как поменять цвет текста при наведении на него указателя мыши?

Как поменять цвет текста при наведении на него указателя мыши?

Для обычных объектов событие наведения на объект меняет его цвет, а для обычного текстового поля не работает

197
Unity поддержка соотношения 18/9

Unity поддержка соотношения 18/9

Здравствуйте, использую Unity 20173

199
Определить жесткий диск по умолчанию

Определить жесткий диск по умолчанию

Каким образом можно определить, какой жесткий диск используется по умолчанию? То есть, например, тот, на котором установлена система?

227