使用SqlDataReader填充ArrayList?

时间:2010-01-20 22:49:33

标签: c# arraylist sqldatareader

我正在尝试实现一个方法,该方法将获取给定的连接字符串并返回包含SQL视图内容的ArrayList。

我已经验证了连接字符串和视图本身的有效性。但是,我没有看到下面的代码中的问题。在调试中,当它运行ExecuteReader方法然后尝试进入while循环以遍历视图中的记录时,它会立即失效,因为某些原因 sqlReader.Read()不会。 / p>

    public ArrayList GetEligibles(string sConnectionString)
    {
        string sSQLCommand = "SELECT field1, field2 FROM ViewEligible";

        ArrayList alEligible = new ArrayList();

        using (SqlConnection sConn = new SqlConnection(sConnectionString))
        {
            // Open connection.
            sConn.Open();

            // Define the command.
            SqlCommand sCmd = new SqlCommand(sSQLCommand, sConn);

            // Execute the reader.
            SqlDataReader sqlReader = sCmd.ExecuteReader(CommandBehavior.CloseConnection);

            // Loop through data reader to add items to the array.
            while (sqlReader.Read()) 
            {
                EligibleClass Person = new EligibleClass();

                Person.field1 = sqlReader["field1"].ToString();
                Person.field2 = sqlReader["field2"].ToString();

                alEligible.Add(Person);
            }

            // Call Close when done reading.
            sqlReader.Close();
        }

        return alEligible;
    }

注意, EligibleClass 只是一个表示视图结果的一行的类对象。

1 个答案:

答案 0 :(得分:1)

我会检查几件事:

  1. 连接字符串是否正常
  2. 连接字符串中的用户是否可以访问数据库/视图
  3. 您可以从
  4. 的电脑上访问该数据库吗?
  5. ViewEligable视图是否存在
  6. 视图是否包含field1和field2列。
  7. 这里有一种方法可以稍微清理一下代码(假设你有.net 2.0)

        public List<EligibleClass> GetEligibles(string sConnectionString)
        {
            List<EligibleClass> alEligible = null;
    
            try
            {
                using (SqlConnection sConn = new SqlConnection(sConnectionString))
                {
                    sConn.Open();
                    using (SqlCommand sCmd = new SqlCommand())
                    {
                        sCmd.Connection = sConn;
                        sCmd.CommandText = "SELECT field1, field2 FROM ViewEligible";
    
                        using (SqlDataReader sqlReader = sCmd.ExecuteReader())
                        {
                            while (sqlReader.Read())
                            {
                                EligibleClass Person = new EligibleClass();
    
                                Person.field1 = sqlReader.GetString(0);
                                Person.field2 = sqlReader.GetString(1);
    
                                if (alEligible == null) alEligible = new List<EligibleClass>();
                                alEligible.Add(Person);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
               // do something.
            }
    
            return alEligible;
        }