而不是像这样执行查询的传统方式:
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);
}
这样做会对性能产生影响吗?此外,有没有办法改善现有的代码?谢谢!
答案 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)
);