优化了在c#中创建oraclecconnection和Command对象的方法

本文关键字:Command 对象 方法 oraclecconnection 创建 优化 | 更新日期: 2023-09-27 18:04:24

我在DAL层有以下代码:

using(OracleConnection conn= new OracleConnection(connString))
using(OracleCommand cmd = new OracleCommand(sql.ToString(), conn))
{
  conn.Open();
}

上面的对象创建是在DAL方法的多个位置完成的。我正在寻找是否有任何方法来优化这个对象创建,而不是在我的代码中重复它几次。

任何建议都会很有帮助。

谢谢,WH

优化了在c#中创建oraclecconnection和Command对象的方法

每次都需要几乎相同数量的代码来确保正确设置,因为它需要是一次性的,因此没有好的方法可以做到这一点。在此之外的任何内容:使用(OracleCommand cmd = new OracleCommand(sql.ToString(), conn))将解除连接。你为什么不能使用像实体框架这样的ORM ?除此之外,你可以创建一个类,它将返回一个OracleConnection,然后调用。open(),但你需要继承IDisposable,并在完成后调用。dispose(),否则你将填满你的应用程序池。您可以在数据管理器类中执行如下操作:

public void RunQuery(string query)
{
    using(OracleConnection conn= new OracleConnection(connString))
    using(OracleCommand cmd = new OracleCommand(query, conn))
    {
        conn.Open();
        //do your data transaction here
     }
}

这将允许您将查询传递到单个位置进行处理。仍然不是一个很好的解决方案,但可以让你把它放在一个地方。使用它:

new YourDataClass().RunQuery("INSERT...");

你需要一些不同的类来处理像选择之类的事情,以便在需要时返回数据。

编辑:这只是概念。您将有一个数据类,并向它发送查询。这样就不会在所有地方复制相同的连接代码。您需要在此基础上添加更多内容,以使其涵盖与数据库接口的所有方面,但这是一般概念。这是在一个类中编写的,并在您的应用程序中反复使用。同样,ORM会好得多,但这将完成您想要做的事情。

public class YourDataClass
{
    public void RunQuery(string query) //for add, update where you don't want to return anything, could add a second parameter to send in a List<SqlParameter> to add data.
    {
        using(OracleConnection conn= new OracleConnection(connString))
        using(OracleCommand cmd = new OracleCommand(query, conn))
        {
            conn.Open();
            //do your data transaction here
            cmd.ExecuteNonQuery();
        }
    }
    public DataTable GetData(string query) //for selecting data
    {
        using(OracleConnection conn= new OracleConnection(connString))
        using(OracleCommand cmd = new OracleCommand(query, conn))
        {
            conn.Open();
            //do your data transaction here
            dt.Add(cmd); //add data to data table or dataset
            return dt;
        }
    }
}