SqlConnection和SqlCommand的替换
本文关键字:替换 SqlCommand SqlConnection | 更新日期: 2023-09-27 18:22:10
我一直在编写大量到Microsoft SQL Server数据库的open
和close
连接。我不确定这是否是.NET可用的最新技术。有没有我缺少的最新.NET函数?
示例代码:
protected string InjectUpdateToProductDBString(string Command, TextBox Data, string TBColumn)
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["AuthenticationDBConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
con.Open();
SqlCommand cmd = new SqlCommand(command, con);
cmd.Parameters.AddWithValue("@" + TBColumn, Data.Text.ToString());
cmd.ExecuteNonQuery();
con.Close();
return "Data successfully updated";
}
有什么可以替代这种繁琐的代码技术吗?只是为了改进我的代码技术而进行的讨论。
还有其他编写方法和可以使用的其他工具(如实体框架)。
但是,我建议您为数据访问调用创建一个(或多个)静态函数。
protected DataTable ExecuteSqlDataReader(string connection, string sqlQuery, SqlParameter[] cmdParams)
{
MySqlConnection con = new MySqlConnection(connection);
MySqlCommand cmd = new MySqlCommand(sqlQuery, con);
cmd.Parameters = cmdParams;
MySqlDataAdapter sda = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
sda.Command.Close();
return dt;
}
创建Getting a dataTable、One value、ExecuteNonQuery的方法,甚至通过将SqlCommand创建抽象为自己的方法来进一步分解它。
在任何项目中,此代码都应该只写几次。
请确保将SqlConnection
包含在using
语句中。即使出现异常,它也将确保连接处于关闭状态。另外,将SqlCommand
对象包含在using
语句中,这将确保非托管资源的处置。
在您当前的代码片段中,如果cmd.ExecuteNonQuery();
处出现异常,那么您的行con.Close
将不会执行,从而保持连接打开。
所以你的方法可以是:
protected string InjectUpdateToProductDBString(string Command, TextBox Data, string TBColumn)
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["AuthenticationDBConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlCommand cmd = new SqlCommand(command, con))
{
cmd.Parameters.AddWithValue("@" + TBColumn, Data.Text.ToString());
cmd.ExecuteNonQuery();
}
}
return "Data successfully updated";
}
稍后,您可以为查询中返回的行返回DataTable
或List<T>
。
如果你想离开ADO.Net,那么你可以研究对象关系映射(ORM),它将为你提供基于数据库的对象,以及更容易管理代码库的方法。实体框架就是其中之一。你可以看到https://stackoverflow.com/questions/132676/which-orm-for-net-would-you-recommend
private SqlConnection GetConnection()
{
var con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["AuthenticationDBConnectionString"].ConnectionString);
con.Open();
return con;
}
protected string InjectUpdateToProductDBString(string Command, TextBox Data, string TBColumn)
{
using (var con = GetConnection())
{
using (var cmd = con.CreateCommand())
{
cmd.Parameters.AddWithValue("@" + TBColumn, Data.Text);
cmd.ExecuteNonQuery();
return "Data Succesfully Updated";
}
}
}