какова наилучшая практика обновления данных в SQL Server в ASP.Net

#c# #.net #asp.net #sql #sql-server

#c# #.net #asp.net #sql #sql-server

Вопрос:

Я выполняю обновление данных на SQL Server в ASP.Net.

и у меня есть только файл cs, без файла aspx / ascx, поэтому я не буду использовать здесь элемент управления SqlDataSource.

Ниже приведен мой код:

 string connStr = ConfigurationManager.ConnectionStrings["XXConnString"].ConnectionString;

SqlConnection conn = new SqlConnection(connStr);

if (conn.State == ConnectionState.Closed)
{
    conn.Open();
}

string query = @"exec dbo.XX_Insert_Announcement @AnnID ='"   id  
                                            "', @AnnTitle ='"   title  
                                            "', @AnnSubmitDateTime ='"   startDate   
                                            "', @AnnProcessDateTime ='"   endDate   "'";

SqlCommand cmd = new SqlCommand(query, conn);
cmd.ExecuteNonQuery();
conn.Close();

if (conn.State == ConnectionState.Open)
{
    conn.Close();
}
  

Я думаю, что мой код недостаточно хорош для обработки ошибок, если выполнение запроса завершилось неудачно, ошибка не выдается, и код продолжает выполняться без обновления базы данных.

Возможно, эту проблему может решить использование инструкции Using, кода, как показано ниже:

 using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteNonQuery();
}
  

пожалуйста, прокомментируйте и посоветуйте, какая практика является наилучшей.

заранее благодарю вас.

Ответ №1:

Ваш второй подход лучше, но было бы лучше, если бы вы использовали Parameterized query for better prevention from a SQL Injection Attack .

 using (SqlConnection connection = new SqlConnection(connectionString))
{
 using(SqlCommand command = connection.GetCommand(queryString, CommandType.Text))
 {
  command.Parameters.Add(new SqlParameter("AnnID", id));
  command.Parameters.Add(new SqlParameter("AnnTitle", title));
  ............
  ..............
  command.Connection.Open();
  command.ExecuteNonQuery();
 }
}
  

Комментарии:

1. exec dbo. XX_Insert_Announcement выглядит как вызов хранимой процедуры, поэтому я бы изменил CommandType. Введите текст в CommandType. StoredProcedure