2

現在、C# で記述された WPF アプリケーションでデータベースからレコードを取得しようとしています。私は SQL データ リーダーを使用しており、問題なく接続しているように見えますが、次のようにすると NullReferenceException が発生します。

        if (isString == true)
        {
            SqlDataAdapter adapter = new SqlDataAdapter("SELECT PartNumber FROM LoanerItems", loanersConnection);
            DataTable datatable = new DataTable();
            adapter.Fill(datatable);

            for (int i = 0; i < datatable.Rows.Count - 1; i ++)
            {
                passBackRecords[i] = datatable.Rows[i].ToString();
            }
        }

繰り返しますが、データベースに接続しているように見えますが、デバッガーを実行すると、データテーブルがいっぱいに見えません。

それが役立つかもしれない場合の私の接続文字列:

        SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
        scsb.DataSource = "LLOYD2\\";
        scsb.InitialCatalog = "LoanersTest";
        scsb.IntegratedSecurity = true;
        scsb.ConnectTimeout = 30;

現在、完成したデータベースではなく、2 つのレコードを含むテスト データベースを使用しています。Transact-SQL エディターを使用してみましたが、レコードは問題なく表示されます。

*編集:

passBackRecords を初期化した後、次は ArguementOutOfRange 例外をスローし始めました。

            SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM LoanerItems", loanersConnection);
            DataTable datatable = new DataTable();
            adapter.Fill(datatable);
            for (int i = 0; i < datatable.Rows.Count - 1; i++)
            {
                passBackRecords[i] = datatable.Rows[i]["BCPartNumber"].toString;
            }

私は両方を試しました:

for (int i = 0; i < datatable.Rows.Count - 1; i++)

と:

for (int i = 1; i < datatable.Rows.Count; i++)

しかし、どちらも機能していないようです。

datatable.Rows.Count;

データテーブルに 2 つの行があることを示します。

4

1 に答える 1

3

ゼロ行が返されたとしてもDataTablenull. ただし、この行には 1 つの場所があります。

passBackRecords[i] = datatable.Rows[i].ToString();

それは失敗します-いつpassBackRecordsですnull。別の可能な場所は次のとおりです。

.Rows[i].ToString();

行の値が の場合、呼び出し時にnullも取得します。しかし、私はあなたがまだ初期化していないという事実にほとんどお金をかけるでしょう.NullReferenceExceptionToString()passBackRecords

于 2013-06-07T13:41:59.950 に答える