MS Access простой запрос на обновление SQL [дубликат]

myList = [[1]*4] * 3 создает один объект списка [1,1,1,1] в памяти и копирует его ссылку 3 раза. Это эквивалентно obj = [1,1,1,1]; myList = [obj]*3. Любая модификация obj будет отражена в трех местах, где obj упоминается в списке. Правильным утверждением будет:

myList = [[1]*4 for _ in range(3)]

или

myList = [[1 for __ in range(4)] for _ in range(3)]

. Важно отметить, что * оператор в основном используется для создания список литералов. Поскольку 1 является литералом, значит, obj =[1]*4 создаст [1,1,1,1], где каждый 1 будет атомарным, а не ссылкой 1, повторяемым 4 раза. Это означает, что если мы obj[2]=42, то obj станет [1,1,42,1] не [42,42,42,42], как могут предположить некоторые.

1
задан rene 1 June 2014 в 20:48
поделиться

1 ответ

Microsoft OLEDB игнорирует имена параметров и обращает внимание только на порядок , в котором параметры появляются в CommandText. Итак, для

cmd2.CommandText = @"UPDATE Table1
                     SET urunadedi=urunadedi-@hesaplam
                     WHERE urunadi=@urunid";

нам нужно сначала добавить параметр @hesaplam, поскольку он появляется сначала в CommandText

cmd2.Parameters.AddWithValue("@hesaplam", Convert.ToInt64(textBox2.Text));
cmd2.Parameters.AddWithValue("@urunid", Convert.ToInt64(textBox1.Text));

. Обратите также внимание, что поскольку имена параметров OLEDB игнорируются довольно часто встречается знак вопроса (?), используемый в качестве замещающего параметра:

cmd2.CommandText = @"UPDATE Table1
                     SET urunadedi=urunadedi-?
                     WHERE urunadi=?";
cmd2.Parameters.AddWithValue("?", Convert.ToInt64(textBox2.Text));  // @hesaplam
cmd2.Parameters.AddWithValue("?", Convert.ToInt64(textBox1.Text));  // @urunid
4
ответ дан Gord Thompson 20 August 2018 в 17:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: