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();
    }
}

这也是一个插入,但使用 BEL、BLL、DAL,最后在 PL 的按钮插入事件处理程序下调用 BLL 层的 insert_method。
据我所知,3 层有助于将代码组织成不同的层,这样维护会更容易,并且还有其他 x 因素。
但是,第一个(代码类型 1)对我来说似乎要简单得多。
所以,请告诉我,
1.当第一个更简单和容易时,他们为什么会提到第二个?
2. 两者之间的性能如何,哪一个更快?

提前致谢。

4

2 回答 2

1

第二种方法可帮助您在将数据插入数据库之前进行业务验证。例如,您要添加业务验证,即 Textbox1.text 应以小写形式保存,最小长度为 X ,在这种情况下,如果您有两个地方更新/保存逻辑,您必须在两个地方和任何地方编写验证更改需要在两个地方传播,但是拥有一个业务对象将允许您在数据流进入数据库之前对其进行控制。与性能相关,除非您插入和创建数千个对象,否则差别不大。但如果您的项目规模较小且 POC 方法 1 是不错的选择

于 2013-09-03T05:32:35.567 回答
1

第一个示例将数据存储代码与 UI 代码紧密结合。此代码不能在同一项目(或其他项目)的其他地方使用,除非复制/粘贴然后编辑文本框名称。如果在 sp_userinformation 中添加了新的必需参数,并且此代码已复制到多个地方(或其他项目),则必须找到并更新每个用法。编译器无法帮助缺少参数。

将此与使用对象(有时称为数据传输对象)的第二个示例进行比较。第二个示例不直接引用用户界面对象,因此可以隔离在单独的类中。可以从应用程序的其他部分或从另一个鼓励代码重用的应用程序调用相同的代码。如果向 sp_userinformation 添加了新的必需参数,则也可以将其添加到 objBELUserDetails 构造函数中。如果其他一些代码没有通过构造函数传入所需的参数,则代码将无法编译。这允许在部署之前发现错误。还有许多其他原因,但您已经找到了其中一些原因,包括组织、易于维护。太多了,这里就不一一讨论了。

至于性能,第一个代码可能更高效,因为它只是进行数据库调用。但是,传递数据传输对象时性能通常不会受到很大影响。完成数据库调用可能需要比任何 c# 代码更长的时间。但是,您可以随时测量以确保。

无论如何,希望这会有所帮助!

于 2013-09-03T04:20:53.093 回答