0

目标:实现更通用的创建数组列表的方法。

问题:我必须创建多个数组列表,每个数组都匹配一个唯一的结构,以便比较和更新 Sql 数据库中的表。本着 DRY 的精神,我试图找到一种更好的方法来创建每个数组。我正在使用的代码如下

示例代码:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Diagnostics;  
using System.Data;  
using System.Data.SqlClient;  
using System.Collections;  
using System.Configuration;  

public static void Users()
{
    String sql = "";

    try
    {

         conn.Open();

         sql = "SELECT" +
                   "database.dbo.table1.username," +
                   "database.dbo.table1.status"   +
               "FROM" +
                   "database.dbo.table1";
         SqlCommand cmd = new SqlCommand(sql, conn);

         SqlDataReader dr = cmd.ExecuteReader();

         while (dr.Read())
         {
              //structure below
              User structure_A = new User();

              structure_A.username = dr.GetValue(0).ToString();
              structure_A.status   = dr.GetValue(1).ToString();

              //added to arraylist
              arraylist_A.Add(structure_A);
          }

          dr.Close();
          conn.Close();
}

注:可根据要求提供更多信息。提前感谢您的任何见解

4

2 回答 2

3

您可以做的一件事是创建一个采用不同参数的通用方法。例如:

public static ArrayList LoadInfo<T>(string sql, Func<SqlDataReader, T> getItem) where T: new
{
    var list = new ArrayList();
    conn.Open();
    SqlCommand cmd = new SqlCommand(sql, conn);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        list.Add(getItem(dr));
    }
    return list;
}

public static User LoadUser(SqlDataReader dr)
{
    User structure_A = new User();
    structure_A.username = dr.GetValue(0).ToString();
    structure_A.status   = dr.GetValue(1).ToString();
    return User;
}

现在,要调用它来加载用户,只需将 SQL 查询和LoadUser方法传递给它:

string usersQuery = "SELECT ....";  // select users query
ArrayList usersList = LoadInfo(usersQuery, LoadUser);

如果您需要加载一堆Fooby对象,您将创建 Fooby 查询和一个LoadFooby可以从数据行创建和填充 Fooby 的方法。

我建议您考虑使用List而不是ArrayList.

于 2013-09-18T21:10:33.093 回答
1

您可以使用泛型解决问题并使用反射来找出结构的样子。但我建议改为查看实体框架。

这里有一个很好的介绍首先使用 EF 数据库:http: //msdn.microsoft.com/en-us/data/jj200620

于 2013-09-18T21:05:14.827 回答