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;

我目前正在使用一个包含两条记录的测试数据库,而不是最终确定的数据库。我试过使用 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;

显示数据表中有两行。

4

1 回答 1

3

即使返回零行,DataTable也不会是null. 但是,这一行中有一个地方:

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

那将失败-when passBackRecordsis null。另一个可能的位置是:

.Rows[i].ToString();

如果该行中的值是nullNullReferenceException在调用时也会得到一个ToString(). 但是我几乎会把钱放在你还没有初始化的事实上passBackRecords

于 2013-06-07T13:41:59.950 回答