2010-12-07 42 views
0

我有一個sqlquery的SqlConnection可能不會帶來任何結果。在極少數情況下會發生這種情況,我有另一個sqlquery和另一個連接到數據庫的連接。必須有更好的方法來做到這一點,不是嗎?如何正確填充數據集兩次(空集後)

在旁邊注意,這是最好關閉後連接。填充?我認爲是這樣,但沒有看到它在任何地方使用。

我還在C#/ .Net中開始 - 謝謝!

SqlConnection dbSqlConnection = new SqlConnection(--); 
SqlDataAdapter dbSqlDataAdapter = new SqlDataAdapter(sqlquery, dbSqlConnection); 
DataSet dbDataSet = new DataSet(); 
dbSqlDataAdapter.Fill(dbDataSet, "popGrid"); 
dbSqlConnection.Close(); 

if (dbDataSet.Tables["popGrid"].Rows.Count == 0) 
{ 
    SqlDataAdapter newSqlDataAdapter = new SqlDataAdapter(sqlquery2, dbSqlConnection); 
    newSqlDataAdapter.Fill(dbDataSet, "popGrid"); 
    dbSqlConnection.Close(); 
+0

什麼是Sql語句? – 2010-12-07 05:34:29

+0

是的,總是關閉你的數據庫連接 - 數據庫本身的連接數量有限,所以如果太多的連接打開,新的連接將失敗。 – 2010-12-07 05:35:08

+0

您需要在if語句之後擁有dbSqlConnection.Close。你只打開一次SqlConnection,所以應該關閉一次。如果你在關閉它後訪問它,你會得到一個異常。 – TamusJRoyce 2010-12-07 05:37:00

回答

2

對於第一個問題,我認爲在檢查第一個結果爲空後連接數據庫兩次也是可以的。除非這個操作(獲取數據兩次)超級頻繁,否則連接到DB需要很多時間(例如,您在美國,數據庫在英國,這是可能的,對的,您不必將兩者合併爲一個查詢) ?) 而對於第二個問題:

using (SqlConnection dbSqlConnection = new SqlConnection(connStr)) 
{ 
    //do things 
}//the connection will be disposed automatically here 
0

你可以把它做一個查詢:

Select * From SqlQuery1 Into TempTable1; 

IF (SELECT Count(*) From TempTable1) = 0 BEGIN 
    Select * From SqlQuery2; 
ELSE 
    Select * From TempTable1; 
END 

這是僞代碼,因爲我還沒有測試,它是那種一時興起。自從我寫了一些疑問之後就過了一會兒。因此,對於作業,研究如何使用if語句來測試如何確定臨時表是否沒有行,然後返回不同的查詢(如果有)。

編輯:

把兩個查詢到一個查詢可以忽略不計比調用兩個查詢好。所以除非你有一個很好的理由,否則很可能不值得去做。