0

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

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

    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只是代表视图结果的一行的类对象。

4

1 回答 1

1

我会检查几件事:

  1. 连接字符串是否正常
  2. 您的连接字符串中的用户是否有权访问数据库/视图
  3. 你能从你的电脑上访问那个数据库吗
  4. ViewEligable 视图是否存在
  5. 视图是否包含 field1 和 field2 列。

这里有一种方法可以让你稍微清理一下代码(假设你有.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;
    }
于 2010-01-20T23:30:57.987 回答