2009-06-05 143 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 
    } 
} 
相關問題