моя команда insert не изменяет базу данных при использовании через программирование

#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. Большое спасибо, лучшее решение