是否可以用sql server中的值填充普通数组?

时间:2015-06-02 18:40:37

标签: c#

我想创建一个返回我的类数组的方法,我知道如何处理arrayList但我需要填充'普通'数组[]。

我正在使用arrayList

public ArrayList GetListProductFamily()
{         
    ArrayList arrayProductFamily = new ArrayList();

    IConnection conn = ConnUtil.GetConnection();
    string query = GET_QUERY;

    ProductFamily productFamily = new ProductFamily();

    try
    {
        conn.ExecuteReader(query);

        if (conn.DataReader.Read())
        {
            productFamily.cIdProductFamily = DB.LoadString(conn.DataReader, "CIDPRODUCTFAMILY");
            productFamily.cProductFamily = DB.LoadString(conn.DataReader, "CPRODUCTFAMILY");
            productFamily.lActive = Convert.ToInt32(DB.LoadInt(conn.DataReader, "LACTIVE"));

            arrayProductFamily.Add(productFamily);
        }
    }
    catch (Exception ex)
    {
        Logger.Error("Error", ex);
    }

    return arrayProductFamily;
}

2 个答案:

答案 0 :(得分:1)

public ProductFamily[] GetListProductFamily()
{
    List<ProductFamily> arrayProductFamily = List<ProductFamily>();

    IConnection conn = ConnUtil.GetConnection();
    string query = GET_QUERY;


    try
    {
        var dataReader = conn.ExecuteReader(query);

        while (dataReader.Read())
        {
            ProductFamily productFamily = new ProductFamily();
            productFamily.cIdProductFamily = DB.LoadString(dataReader, "CIDPRODUCTFAMILY");
            productFamily.cProductFamily = DB.LoadString(dataReader, "CPRODUCTFAMILY");
            productFamily.lActive = Convert.ToInt32(DB.LoadInt(dataReader, "LACTIVE"));

            arrayProductFamily.Add(productFamily);
        }
    }
    catch (Exception ex)
    {
        Logger.Error("Error", ex);
    }

    return arrayProductFamily.ToArray();
}

非常简单,只需使用ArrayList替换班级中的List<ProductFamily>,然后返回列表的.ToArray()

自从引入泛型以来,ArrayList的使用通常会被折旧,并且您应该尽可能地避免使用List<T>强类型。

你也没有在阅读器中进行迭代,我不确定DB.LoadXXX做了什么,但我假设它需要IDbDataReader并加载指定的列名。这些内容可以替换为dataReader.GetInt32dataReader.GetString,具体取决于您要阅读的内容。

还应该注意,您要检查DBNull,否则您将提前抛出异常并退出。您可能希望在while循环中移动try / catch,以便一条记录不会导致读取器失败。

您还希望在using循环中使用阅读器,但我会将其留给您实施。

答案 1 :(得分:0)

您可以通过以下方式更改代码来实现:

ExecuteReader

但这会让你有问题,因为上面的数组是固定长度的。您正在使用Array.Resize,因此您无法计算记录总数。所以你需要动态地改变长度。您可以使用 while (dataReader.Read()) { Array.Resize(ref arrayProductFamily , arrayProductFamily.Length+1); .... rest of your code } 执行此操作,您的代码可能会更改如下

{{1}}