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は、ビューの結果の1行を表す単なるクラスオブジェクトであることに注意してください。

4

1 に答える 1

1

私がチェックするいくつかのこと:

  1. 接続文字列は大丈夫ですか
  2. 接続文字列のユーザーはデータベース/ビューにアクセスできますか
  3. あなたのPCからそのデータベースにアクセスできますか
  4. ViewEligable ビューは存在しますか
  5. ビューに field1 列と field2 列が含まれていますか。

ここで、そのコードをいくらかクリーンアップできる可能性のある1つの方法(.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 に答える