#c# #mysql #.net #visual-studio-2010 #sql-server-2008
#c# #mysql #.net #visual-studio-2010 #sql-server-2008
Вопрос:
Когда я вставляю значения с помощью запроса, база данных вставляет, когда делает это с помощью кодирования, она не вставляется, хотя она показывает успех. Я использую C # 2010 и 2012, оба не добавляют мой код
con.Open();
cmd = new SqlCommand("insert into Main_2(Name,NIC,NA_ID,PS_ID) values('" name "','" nic "',(SELECT NA_ID FROM NationalAssembly WHERE Name='" na_name "'),(SELECT PS_ID FROM ProvisionalAssembly Where Name='" ps_name "'))", con);
cmd = new SqlCommand("UPDATE ProvisionalAssembly SET Count= 1 WHERE Name='" ps_name "'", con);
cmd = new SqlCommand("UPDATE NationalAssembly SET Count= 1 WHERE Name='" na_name "'", con);
cmd.ExecuteNonQuery();
con.Close();
Ответ №1:
SqlCommand
это класс, это означает, что это ссылочные типы.
Каждый раз, когда вы создаете новый SqlCommand
объект и используете его cmd
в качестве ссылки. Это означает, что выполняется только ваш последний SqlCommand
. У ваших первых двух SqlCommand
больше нет ссылки в памяти при выполнении с ExecuteNonQuery
помощью метода.
Если вы хотите выполнить все эти команды, вам нужно выполнить отдельно для каждой команды.
И, пожалуйста, используйте параметризованные запросы. Такого рода конкатенации строк открыты для атак с использованием SQL-инъекций.
Также используйте оператор using для удаления подключений к базе данных.
using(SqlCommand cmd = new SqlCommand(YourInsertStatement))
{
con.Open();
cmd.ExecuteNonQuery();
cmd.CommandText = YourFirstUpdateStatement;
cmd.ExecuteNonQuery();
cmd.CommandText = YourSecondUpdateStatement;
cmd.ExecuteNonQuery();
}
Комментарии:
1. Отличный, хорошо сформированный ответ с информацией о лучших рекомендациях. OP должен принять это как ответ.
2. Большое спасибо, лучшее решение