优化了在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
每次都需要几乎相同数量的代码来确保正确设置,因为它需要是一次性的,因此没有好的方法可以做到这一点。在此之外的任何内容:使用(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;
}
}
}