SqlConnection和SqlCommand的替换

本文关键字:替换 SqlCommand SqlConnection | 更新日期: 2023-09-27 18:22:10

我一直在编写大量到Microsoft SQL Server数据库的openclose连接。我不确定这是否是.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";
    }

有什么可以替代这种繁琐的代码技术吗?只是为了改进我的代码技术而进行的讨论。

SqlConnection和SqlCommand的替换

还有其他编写方法和可以使用的其他工具(如实体框架)。

但是,我建议您为数据访问调用创建一个(或多个)静态函数。

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

稍后,您可以为查询中返回的行返回DataTableList<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";
        }
    }
}