我一直在编写很多open
和close
连接到Microsoft SQL Server数据库。我不确定它是否是适用于.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";
}
这种繁琐的代码技术有没有替代品?只是讨论改进我的代码技术。
答案 0 :(得分:1)
还有其他方法可以编写它和您可以使用的其他工具(如实体框架)。
但是,我建议您为数据访问调用创建一个静态函数(或多个)。
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;
}
创建获取dataTable,One值,ExecuteNonQuery的方法,甚至通过将SqlCommand创建抽象给它自己的方法来进一步打破它。
在任何项目中,此代码只能写几次。
答案 1 :(得分:0)
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";
}
}
}
答案 2 :(得分:0)
请务必将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,那么您可以查看Object-Relation Mapping (ORM),它将根据您的数据库提供对象,并提供更简单的方法来管理您的代码库。 Entity framework就是其中之一。您可能会看到https://stackoverflow.com/questions/132676/which-orm-for-net-would-you-recommend