c#数据库选择

时间:2011-04-18 09:22:56

标签: c#

我有一张名为transaktions的表格,其中我插入了客户账单和客户编号。我的主键是一个具有标识规范的int id。我的问题是如何选择包含特定customer_nr的所有行并返回所有结果?

现在我正在做:

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";
}

这将只打印与客户nr匹配的第一行,剩下至少20行。有人有任何建议可以帮助我吗? 最诚挚的问候

4 个答案:

答案 0 :(得分:4)

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

e.g。

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;
}

答案 1 :(得分:3)

由于您执行return ...并且您的方法规范几乎将结果限制为一个特定值,因此您永远不会返回多个帐单名称。它会在读取行后立即返回名称,如果没有返回行则返回默认值。

您应该将值放在列表或类似内容中并返回。

答案 2 :(得分:2)

尝试将if更改为

while (er.Read())

答案 3 :(得分:1)

我想一个简单的解决方案是返回整个结果集而不是tring来解决字符串问题。然后遍历调用方法

中的所有项目