如果说我需要针对两个单独的数据库运行两个单独的SQL语句。现在我做(伪代码):
Try{
declare variable connectionA to DatabaseA
declare variable connectionB to DatabaseB
connectionA.open()
connectionB.open()
declare variable SQLCmdA with ConnectionA and one SQL statement
declare variable SQLCmdB with ConnectionB and another SQL statement
SQLCmdA.executeNonQuery()
SQLCmdB.executeNonQuery()
}
Catch ()
{
print error message
}
Finally(){
connectionA.close()
connectionB.close()
SQLCmdA.Dispose()
SQLCmdB.Dispose()
}
以上看起来非常笨拙。如果我有三个不同的sql语句,我需要三个不同的SQLCmd变量。
有没有“标准”的方式来做这些事情,特别是在效率,性能方面?如果有人能提供一个简单的改进的伪代码,那就太好了。
此外,我是否需要担心实施连接池,以节省资源并加快程序的速度?如果是这样,我在这种情况下如何实现它?
谢谢!
答案 0 :(得分:5)
而不是添加变量,为什么不创建一个类?
public class MyDatabaseConnection {
public MyDatabaseConnection(string connectionString) {
this.connectionString = connectionString;
// create a database connection perhaps
}
// some methods for querying a database
public void execute(string query) { }
}
在这种情况下,可以轻松添加第三个数据库连接
MyDatabaseConnection con1 = new MyDatabaseConnection("Server=localhost");
MyDatabaseConnection con2 = new MyDatabaseConnection("Server=other_server");
MyDatabaseConnection con3 = new MyDatabaseConnection("Server=third_one");
并在每个
上执行sql查询MyDatabaseConnection[] cons = new MyDatabaseConnection[]{ con1, con2, con3 };
foreach (MyDatabaseConnection con in cons) {
con.execute(someSqlCommandText);
}
答案 1 :(得分:2)
如果您要进行低级数据库访问,这对我来说似乎很好。当然,如果您只需要在任何时候打开一个数据库连接,您可以将大部分代码抽象为一个方法(将SQL命令/文本作为参数并返回结果),但这可能不是这样的。你的情况。
你也可以通过使用using
语句使事情略微整洁:
using(var sqlConnectionA = new ...)
using(var sqlConnectionB = new ...)
{
try
{
// Perform queries here.
}
catch (SqlException exSql)
{
// SQL error
}
}
答案 2 :(得分:1)
如果您需要同时打开所有两个(或三个或......)连接并且需要为每个连接保留SqlCommand,那么是的,您可能必须以您的方式执行此操作正在做。
但是,如果您一次只需要打开一个连接,则可以使用单个连接和单个命令,然后根据需要进行更改。