为什么我返回的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] + "%";
}
这里最接近答案的是
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
。