为什么我返回的DataSet实例没有表?

时间:2014-03-10 15:27:19

标签: c# database ado.net

当我连接到数据库并且我想要从表中读取数据时,它们无法显示这些数据 例外细节:

  

System.IndexOutOfRangeException:找不到表0。   第141行出错

我在数据集中只有一个表。你知道从我这里读表的最好方法吗?我只返回一张桌子。当我使用foreach时,如何读取一行数据?

       internal DataSet read(string query)
        {
        DataSet nds = new DataSet();
        try
        {

            string connectionString = "...";
            try
            {

                SqlConnection nsqlc = new SqlConnection(connectionString);
                SqlCommand get = new SqlCommand(query, nsqlc);
                nsqlc.Open();
                SqlDataAdapter nsda = new SqlDataAdapter(get);
                nsda.Fill(nds);
                nsqlc.Close();
            }
            catch (Exception)
            {


            }

            return nds;
        }
        catch (Exception)
        {

            return nds;
        }
    }

主要形式:

            links = links + t.Tables[0].Rows[i][0].ToString() + "%";

           String links = "";
            links = "movie%";
            DataSet t = n.read("select id , poster from Movie order by id desc");
            for (int i = 0; i < 10; i++)
            {
                links = links + t.Tables[0].Rows[i][0].ToString() + "%";
                links = links + t.Tables[0].Rows[i][1] + "%";

            }

1 个答案:

答案 0 :(得分:4)

这里最接近答案的是n.read方法返回一个没有表格的DataSet实例。您需要使用调试器进入该方法并找出其行为的原因。

如果您看到问题所在,请修复它。如果没有,请分享read方法代码,然后有人可以为您提供进一步的帮助。

查看您的更新帖子,我发现您正在吞下尝试获取数据时可能发生的每个可能的异常。从catch方法中删除read块。这将允许您查看真正的问题是什么。

您需要在全球范围内从代码中删除异常吞咽。我建议你做一些谷歌搜索,找出为什么这是一个可怕的习惯。

关于“更好的阅读表格”,您应该考虑使用IDataReader

string links = "movie%";

using (var connection = new SqlConnection("your connection string");
{
    using (var command = someExistingConnection.CreateCommand())
    {
        command.CommandText = "select id, poster from Movie order by id desc";
        command.Connection = connection;

        connection.Open();

        try
        {
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var idValue = reader.GetObject(0).ToString(); // would be better to use actual field type, which is unknown at the time I'm writing this
                    var posterValue = reader.GetString(1);

                    // perform concatenation here using the two variables declared above
                    links += String.Format("{0}%{1}%", idValue, posterValue);
                }
            }
        }
        finally
        {
            connection.Close();
        }
    }
}

远远超过使用DataSet处理的效果。