2011-06-09 32 views
3

我正在使用ExecuteScalar一列:如何使用ExecuteScalar檢索多個列?

cmd.commandtext = "select rodeuser from customer_db_map"; 
    string rodecustomer = cmd.executescalar; 

但我需要得到一個以上的塔,例如:

cmd.commandtext = "select rodeuser,username,password from customer_db_map"; 

我需要一個字符串中的每一列:

string rodecustomer = cmd.ExecuteScalar(); 
string username= cmd.ExecuteScalar(); 
string password = cmd.ExecuteScalar(); 

但這是不可能的。這是如何實現的?

+3

這不是'ExecuteScalar()'的用途。使用'ExecuteReader()'並從數據讀取器讀取它們。 – BoltClock 2011-06-09 11:00:39

回答

6

ExecuteScalar執行查詢,並返回查詢返回的結果集中第一行的第一列。其他列或行將被忽略。

要achecive這一點,你需要使用SqlCommand.ExecuteReader方法

+1

如果您希望爲底層提供者提供優化單行查詢的機會,ExecuteReader方法可以使用CommandBehaviour.SingleRow參數(http://msdn.microsoft.com/zh-cn/library/system.data .commandbehavior.aspx) – PHeiberg 2011-06-09 13:24:54

1

的ExecuteScalar返回第一行的第一列,因此你可以使用一個技巧這樣

var m = cmd.commandtext = select str(rodeuser)+','+username+','+password from 
    (select rodeuser,username,password from customer_db_map) 

string[] result=m.ToString().Split(new char[] { ',' }); 
string rodeuser=result[0]; 

string username=result[1]; 

string password=result[2]; 
+0

如果你需要多個結果,你應該使用ExecureReader方法,就像Prakash Kalakoti在前面的答案中寫的那樣。 – nivs1978 2016-08-11 14:27:53