在ADO.NET中使用方法的性能影响

时间:2015-12-22 16:09:19

标签: c# sql webforms 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);
}

这样做会对性能产生影响吗?此外,有没有办法改善现有的代码?谢谢!

1 个答案:

答案 0 :(得分:1)

这两种方法之间应该没有性能差异,因为在这两种情况下都使用参数化查询。由于您直接编程到SqlCommand的方法(而不是IDbCommand方法),因此与其他RDBMS提供程序的可移植性没有区别,因为这两种实现都与SQL Server绑定。

通过标记第二个参数params,即

,可以使界面更容易使用
public static void Execute(string query, params SqlParameter[] parameters)

这可以让你这样打电话:

DB.Execute(
    "INSERT INTO Test VALUES (@FN, @LN, @DateAdded)"
,   new SqlParameter("@FN", txtFN.Text)
,   new SqlParameter("@LN", txtLN.Text)
,   new SqlParameter("@DateAdded", DateTime.Now)
);