2011-02-10 43 views
2

得到一個簡單的字符串下面的代碼無法正常工作。該表中只有一行。我怎麼才能得到SQL將返回的聲明?:如何從數據庫

SqlConnection conn = new SqlConnection(connectionStringArg); 
SqlCommand command = new SqlCommand("select applicationname from tbl_settings"); 
command.Connection = conn; 
conn.Open(); 
string simpleValue = command.ExecuteReader()[0].ToString(); 
conn.Close(); 
return simpleValue; 

好吧,如何實現這個相對簡單的任務的任何幫助將是偉大的。

回答

13

由於只有一個返回值的,你可以這樣做:

string value = (string)command.ExecuteScalar(); 

如果你需要比從第一行返回的第一列多,你需要使用ExecuteReader()。請參閱driis'answer

5

你必須調用從返回的ExecuteReader一個DataReader的Read方法來獲得的第一行。事情是這樣的:

 SqlDataReader rdr = command.ExecuteReader(); 
     if (rdr.Read()) 
      ... 
5

DataReader不能被索引這樣。你需要的東西,如:

using(conn) 
using(var reader = command.ExecuteReader()) 
{ 
    reader.Read(); 
    string simpleValue = reader.GetString(0); 
} 

的總體思路是推進讀者對於每個記錄(使用Read),那麼你就可以從該行讀取值。正如在另一個答案中指出的那樣,如果您知道結果集中只有一個值,command.ExecuteScalar()就是這樣的結果。

1

你會做如

using(SqlConnection conn = new SqlConnection(connectionStringArg)) 
    using(SqlCommand command = new SqlCommand("select applicationname from tbl_settings")) { 

     command.Connection = conn; 
     conn.Open(); 
     SqlDataReader reader = command.ExecuteReader(); 
     if(reader.read()) { 
      return reader.GetString(0); 
     } 
     return null; 
    } 
1

對於要使用ExecuteScalar得到一個值,然後嘗試將其轉換爲字符串中的一個字符串。 從DOC:執行查詢,並在查詢返回的結果集返回第一行的第一列。其他列或行將被忽略。

例子:
string result = command.ExecuteScalar() as string;

對於小的東西,我經常發現LINQ2SQL最簡單的設置和使用。 This tutorial應該讓你在幾分鐘內啓動並運行。對於更大的項目LINQ2SQL is considered obsolete,請參閱this question進行討論和選擇。

0
string applicationname = ""; 
using(var reader = command.ExecuteReader()) 
{ 
    reader.Read(); 
    applicationname = reader.GetString(reader.GetOrdinal("applicationname")); 
} 
0
var query_result = com.ExecuteScalar() as string; 
if (!string.IsNullOrEmpty(query_result)) // do your thing here...