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

本文关键字:实例 DataSet 返回 为什么 | 更新日期: 2023-09-27 17:49:01

当我连接到DB,我想从表中读取数据,它不工作,并显示这些异常详情:

系统。IndexOutOfRangeException: Cannot find table 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] + "%";
            }

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

这里最接近答案的是n.read方法返回一个没有表的DataSet实例。您需要使用调试器进入该方法,并弄清楚它为什么会有那样的行为。

如果你看到问题是什么,解决它。如果没有,分享read方法代码,有人可以进一步帮助你。

看着你更新的帖子,我看到你正在吞咽每一个可能发生的异常,而试图获取数据。从read方法中移除catch块。这将允许您看到真正的问题是什么。

异常吞下是你想在全局范围内从你的代码中去掉的东西。我建议你在谷歌上搜索一下,看看为什么这是一个糟糕的习惯。

关于"更好的方式从表中读取",你应该考虑使用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