SqlDataAdapter.Fill(DataTable)未填充DataTable

时间:2013-06-07 13:36:28

标签: c# sql sql-server

我目前正在尝试从用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;

表明数据表中有两行。

1 个答案:

答案 0 :(得分:3)

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

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

将失败。另一个可能的位置是:

.Rows[i].ToString();

如果行中的值为null,则在调用NullReferenceException时您还会获得ToString()。但是我已经几乎把钱放在你还没有初始化passBackRecords的事实上。