2011-04-18 79 views
2

我有一个名为transaktions的表,我插入了客户账单和客户编号。我的主键是一个具有身份指定的int id。我的问题是我如何选择所有包含特定customer_nr的行并返回所有结果?c#数据库选择

现在即时通讯做:

public string getCustomerTransaktions(string CustNr) 
{ 
    using (var cmd = new SqlCommand("select billing_name from [transaktions] where customer_nr = @customer_nr", Connect())) 
    { 
     cmd.Parameters.AddWithValue("@customer_nr", custNr); 
     using (var er = cmd.ExecuteReader()) 
     { 
      if (er.Read()) 
      { 
       return (string)er["billing_name"]; 
      } 
     } 
    } 
    return "UNKNOWN"; 
} 

这将只打印匹配的客户号码中的第一行,有ATLEAST 20行离开。任何人有任何建议可以帮助我? 问候

+1

看来你缺乏一些基础知识......阅读下面的答案是完美的引导你。 – 2011-04-18 10:02:19

回答

1

我想一个简单的解决方案是返回整个ResultSet而不是tring来解决字符串问题。然后遍历你的呼叫方法中的所有项目

2

尝试改变,如果到时

while (er.Read()) 
+0

试过了。结果一样,只打印第一行 – dumbel 2011-04-18 09:32:53

+0

但是在回车的同时,有效地打破了那个。 – VikciaR 2011-04-18 12:19:20

3

既然你做return ...和你的方法规范几乎将结果限制为一个特定的值,你永远不能返回多个计费名称。读取行后,它将返回一个名称,如果没有行返回,它将返回默认值。

你应该把值放在一个列表或类似的并返回。

4

同意@Niklas和@Skurmedel,你需要使用一个循环来处理多个记录并将它们整理在一起,然后再返回它们。

例如

public List<string> getCustomerTransaktions(string CustNr) 
{ 
    List<string> names = new List<string>(); 

    using (var cmd = new SqlCommand("select billing_name from [transaktions] where customer_nr = @customer_nr", Connect())) 
    { 
     cmd.Parameters.AddWithValue("@customer_nr", custNr); 
     using (var er = cmd.ExecuteReader()) 
     { 
      while(er.Read()) 
      { 
       names.Add((string)er["billing_name"]); 
      } 
     } 
    } 

    return names; 
}