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

时间:2015-07-24 13:21:25

标签: c# oracle singleton database-connection factory-pattern

我在DAL层中有以下代码:

#text{ color: green; }

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

任何建议/建议都会有所帮助。

谢谢, WH

1 个答案:

答案 0 :(得分:0)

如果不需要几乎相同数量的代码来确保正确设置,因为它需要是一次性的,所以真的不是一个好方法。除此之外的任何事情:使用(OracleCommand cmd = new OracleCommand(sql.ToString(),conn))将废除连接。您是否有理由不再使用像Entity Framework这样的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;
        }
    }
}