Вместо традиционного способа выполнения запроса, как это:Производительность Последствия Использование метода в ADO.NET
protected void btnAdd_Click(object sender, EventArgs e)
{
SqlConnection connection = new SqlConnection(
ConfigurationManager.ConnectionStrings["MyCon"].ConnectionString);
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandText = "INSERT INTO Test VALUES (@FN, @LN, @DateAdded)";
cmd.Parameters.AddWithValue("@FN", txtFN.Text);
cmd.Parameters.AddWithValue("@LN", txtLN.Text);
cmd.Parameters.AddWithValue("@DateAdded", DateTime.Now);
cmd.ExecuteNonQuery();
connection.Close();
}
Я создал отдельный класс, который позволяет мне повторно использовать метод для выполнения запроса путем определения оператора SQL и его параметры (имена и значения):
DB.cs
static SqlConnection connection = new SqlConnection(
ConfigurationManager.ConnectionStrings["MyCon"].ConnectionString);
public static void Execute(string query, SqlParameter[] parameters)
{
using (connection)
{
using (SqlCommand command = new SqlCommand(query, connection))
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
connection.Open();
command.ExecuteNonQuery();
}
}
}
, который затем позволяет мне уменьшить мой процесс кодирования здесь:
protected void btnAdd_Click(object sender, EventArgs e)
{
string SQL = "INSERT INTO Test VALUES (@FN, @LN, @DateAdded)";
SqlParameter[] parameters = {
new SqlParameter("@FN", txtFN.Text),
new SqlParameter("@LN", txtLN.Text),
new SqlParameter("@DateAdded", DateTime.Now)
};
DB.Execute(SQL, parameters);
}
Возникают ли какие-либо последствия для работы при выполнении этих задач? Кроме того, существуют ли способы улучшить существующий код? Благодаря!
Я не вижу проблемы с этой техникой, хотя это, вероятно, больше подходит для [обзора кода] (http://codereview.stackexchange.com/), однако я лично не стал бы снова использовать объект соединения. Вы ничего не получаете от этого, и это может вызвать проблемы, просто используйте вашу конфигурацию для статической строки соединения и создайте новый объект SqlConnection в этом методе, а пул соединений .NET позаботится об остальном. Кроме того, вы можете немного упростить код, используя 'command.Parameters.AddRange (parameters);' вместо явного цикла foreach. – GarethD
@GarethD Спасибо за **. AddRange ** tip. Я буду повторно использовать объект соединения для других методов в том же классе DB. Это целесообразно? – abramlimpin
Игнорировать меня, я не читал код правильно. Статическое поле в любом случае будет создавать новый объект соединения с каждым вызовом метода, поэтому вы уже делаете то, что я предлагаю чуть менее подробным образом. – GarethD