2013-11-25 110 views
1

現在,我將數據添加到數據集,然後選擇數據的第一個表中的第一行和第一列。這樣做一定有一些簡短的方法嗎?從SQL Server數據庫中獲取1個單元的更簡單的方法

SqlCommand LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon); 
LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 

SqlDataAdapter da = new SqlDataAdapter(LoadCmd); 
DataSet ds = new DataSet(); 

da.Fill(ds); 

string dato = Convert.ToString(ds.Tables[0].Rows[0][0]); 

回答

5

使用SqlCommand.ExecuteScalar

執行查詢,並在 返回第一行的第一列由查詢返回的結果集。其他列或行是 忽略。

using(SqlCommand LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon)) 
{ 
    LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 
    GlobalVariables.offCon.Open(); 
    var result = LoadCmd.ExecuteScalar(); 
} 

ExecuteScalar回報object類型的數據,你可以投/轉換爲你需要的類型。

(考慮使用using statementSqlCommand對象)

1

如果查詢返回只有一行只有一列,然後正確的方法是ExecuteScalar

SqlCommand LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon); 
LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 
object result = LoadCmd.ExecuteScalar(); 

然後,根據預期的數據類型,你檢查空返回並嘗試轉換結果。
因此,假設返回的值是一個字符串

if(result != null) 
{ 
    string dato = result.ToString(); 
} 

爲空的檢查是在你的情況強制性,除非你是絕對肯定的是,該行確定了在WHERE子句總是你的數據表存在。 同時請注意,的ExecuteScalar返回NULL,而不是DBNull.Value如果需要的值沒有被發現

+0

我的數據庫從來沒有空,但感謝你的小費! –

+1

您不應該在start_tid列中關注null,但是如果您的參數「@ ekgmaaleid」始終與「ekgmaaleid」列匹配。如果where子句沒有找到任何匹配參數值的記錄,那麼ExecuteScalar的結果將爲空。 – Steve

+0

啊我明白你的意思了。那麼也不會發生這種情況,但下次我使用SQL連接創建程序時,我會回顧您的代碼。 –

2
string dato; 
using (var offCon = new SqlConnection("...")) 
using (var LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon)) 
{ 
    LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 
    offCon.Open(); 
    dato = (string)LoadCmd.ExecuteScalar(); 
} 
+0

(字符串)而不是Convert.ToString?聰明。 –

相關問題