2013-09-03 3 views
0

Первый (тип кода 1) - это просто базовая вставка с использованием SqlCommand и вызов хранимой процедуры и вызов метода вставки в разделе «Обработчик событий вставки».Я столкнулся с двумя способами вставки данных сотрудника в мою базу данных ниже. Я просто хотел узнать разницу.

Первый один

Код Тип 1:

public string InsertUserInformation() 
{ 

    SqlConnection con = new SqlConnection(ConnectionString); 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("sp_userinformation", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    try 
    { 
     cmd.Parameters.AddWithValue("@UserName", TextBox1.Text); 
     cmd.Parameters.AddWithValue("@Password", TextBox2.Text); 
     cmd.Parameters.AddWithValue("@FirstName", TextBox3.Text); 
     cmd.Parameters.AddWithValue("@LastName", TextBox4.Text); 
     cmd.Parameters.AddWithValue("@Email", TextBox5.Text); 
     cmd.Parameters.AddWithValue("@PhoneNo", TextBox6.Text); 
     cmd.Parameters.AddWithValue("@Location", TextBox7.Text); 
     cmd.Parameters.AddWithValue("@Created_By", TextBox8.Text); 
     cmd.Parameters.Add("@ERROR", SqlDbType.Char, 500); 
     cmd.Parameters["@ERROR"].Direction = ParameterDirection.Output; 

     cmd.ExecuteNonQuery(); 

     string strMessage = (string)cmd.Parameters["@ERROR"].Value; 

     con.Close(); 

     return strMessage; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     cmd.Dispose(); 
     con.Close(); 
     con.Dispose(); 
    } 
} 

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 

    InsertUserInformation(); 
} 

Второй (Код Тип 2):
http://www.aspdotnet-suresh.com/2010/05/introduction-to-3-tier-architecture-in_17.html

public string InsertUserInformation(BEL objBELUserDetails) 
{ 

    SqlConnection con = new SqlConnection(ConnectionString); 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("sp_userinformation", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    try 
    { 
     cmd.Parameters.AddWithValue("@UserName",objBELUserDetails.UserName); 
     cmd.Parameters.AddWithValue("@Password", objBELUserDetails.Password); 
     cmd.Parameters.AddWithValue("@FirstName", objBELUserDetails.FirstName); 
     cmd.Parameters.AddWithValue("@LastName", objBELUserDetails.LastName); 
     cmd.Parameters.AddWithValue("@Email", objBELUserDetails.Email); 
     cmd.Parameters.AddWithValue("@PhoneNo", objBELUserDetails.Phoneno); 
     cmd.Parameters.AddWithValue("@Location", objBELUserDetails.Location); 
     cmd.Parameters.AddWithValue("@Created_By", objBELUserDetails.Created_By); 
     cmd.Parameters.Add("@ERROR", SqlDbType.Char, 500); 
     cmd.Parameters["@ERROR"].Direction = ParameterDirection.Output; 

     cmd.ExecuteNonQuery(); 

     string strMessage = (string) cmd.Parameters["@ERROR"].Value; 

     con.Close(); 

     return strMessage; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     cmd.Dispose(); 
     con.Close(); 
     con.Dispose(); 
    } 
} 

это также вставка, но использует Бел, BLL, DAL и, наконец, метод insert_method слоя BLL вызывается под обработчиком событий вставки кнопки PL.
Насколько я знаю, 3 уровня помогает упорядочить код на разные уровни, так что обслуживание будет проще и другие факторы x есть.
Но, Первый (Код Тип 1), кажется, намного проще для меня.
Итак, пожалуйста, сообщите мне,
1. Почему они будут ссылаться на Второе, когда первый проще и проще?
2. Что относительно производительности среди двух, какая из них быстрее?

Заранее спасибо.

+3

Скриншоты кода раздражают. Используйте реальные блоки кода, которые, по крайней мере, имеют подсветку синтаксиса. – millimoose

+0

Что касается производительности: код вверх и оба? (Не вижу невидимого Я говорю «не одно, что имеет значение».) – millimoose

+0

Также первый может показаться простым и легким, но также это означает, что нигде в вашем приложении не определена ваша модель данных. Второй используется, потому что разные проблемы должны обрабатываться на разных уровнях приложения, а на языке без средств метапрограммирования это, к сожалению, означает, что в слоях в некоторых случаях не хватает каких-либо параметров делегирования. – millimoose

ответ

1

В первом примере плотно сочетается код хранения данных с кодом UI. Этот код нельзя использовать нигде в одном проекте (или других проектах) без копирования/вставки, а затем редактирования имен текстовых полей. Если в sp_userinformation добавлен новый обязательный параметр, и этот код был скопирован в нескольких местах (или других проектах), то каждое использование должно быть найдено и обновлено. Компилятор не может помочь с отсутствием параметров.

Сравните это со вторым примером, который использует объект (иногда называемый объектом передачи данных). Второй пример не относится непосредственно к объектам пользовательского интерфейса и поэтому может быть изолирован в отдельном классе. Этот же код можно было бы вызывать из других частей приложения или из другого приложения, поощряя повторное использование кода. Если новый новый параметр добавлен в sp_userinformation, это также можно добавить к конструктору objBELUserDetails. Если какой-либо другой код не передается в требуемом параметре с помощью конструктора, тогда код не будет компилироваться. Это позволяет обнаруживать ошибки перед развертыванием. Есть много других причин, но вы уже поразили некоторые из них, организацию, простоту обслуживания. Слишком много, чтобы обсудить здесь.

Что касается производительности, первый код, скорее всего, более перфомант, поскольку он просто вызывает вызов базы данных. Однако производительность, как правило, не сильно ударяет по объектам передачи данных. Для завершения вызова базы данных, вероятно, потребуется гораздо больше времени, чем любой из C# -кодов. Но вы всегда можете измерить, чтобы убедиться.

В любом случае, надеюсь, это поможет!

+0

спасибо за ваши вкладки, это действительно помогло мне понять разницу в лучшем виде, спасибо большое .. :) –

1

Второй подход поможет вам провести проверку бизнеса перед вставкой данных в базу данных. Например, вы хотите добавить подтверждение бизнеса, что Textbox1.text должен быть сохранен в нижнем регистре, а минимальная длина - X, в этом случае, если у вас есть два места для обновления/сохранения логики, вы должны написать подтверждение в двух местах и изменение необходимо размножать в двух местах, но с бизнес-объектом вы сможете управлять потоком данных до того, как он попадет в базу данных. Относительно производительности до и до тех пор, пока вы не вставляете и не создаете тысячи объектов, не имеет большого значения.Но если ваш проект небольшой, а подход POC 1 - хорошие варианты