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

本文关键字:性能 影响 使用方法 ADO NET | 更新日期: 2023-09-27 18:27:42

而不是像这样执行查询的传统方式:

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

这样做是否会对性能产生影响?此外,是否有改进现有代码的方法?谢谢

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

这两种方法之间不应该有性能差异,因为在这两种情况下都使用参数化查询。由于您直接使用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)
);