2009-06-05 128 views
4

如果说我需要对两个单独的数据库运行两个单独的SQL语句。现在我(伪代码):在C#中处理多个数据库连接的最佳方式是什么

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

为什么你必须运行所有的命令在此方法?为什么你不能为每个sql命令/数据库连接创建一个方法? – 2009-06-05 23:21:35

+0

我会使用块来处理关闭/处置问题,但否则,这个想法是健全的。我会问你为什么需要一次引用所有这些参数 - 为什么三个不同的调用分裂成不同的方法,都是连续调用的? – 2009-06-05 23:25:25

回答

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

如果您需要同时打开所有两个(或三个或......)连接并需要为每个连接保留SqlCommand,那么是的,您可能必须按照这种方式你正在做。

但是,如果您只需要一次打开一个连接,则可以使用单个连接和单个命令,然后根据需要更改内容。

2

如果你打算做低级别的数据库访问,这对我来说似乎很好。当然,如果您只需要随时打开一个数据库连接,就可以将大部分代码抽象为一个方法(以SQL命令/文本作为参数并返回结果),但这可能不是这种情况你的情况。

您还可以通过利用using声明让事情变得稍微整洁,因为这样的:

using(var sqlConnectionA = new ...) 
using(var sqlConnectionB = new ...) 
{ 
    try 
    { 
     // Perform queries here. 
    } 
    catch (SqlException exSql) 
    { 
     // SQL error 
    } 
} 
相关问题