2011-06-09 66 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