如果每次都需要几乎相同数量的代码来确保您正确设置它,因为它需要是一次性的,所以确实没有一种好方法可以做到这一点。除此之外的任何东西: using(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;
}
}
}