using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sqlCommand, connection))
{
command.CommandType = CommandType.Text;
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
DataTable datatable = new DataTable();
datatable.Load(reader);
return datatable;
}
}
}
运行此代码将返回一个空的DataTable。但是,循环遍历reader.Read()
并打印到调试控制台会显示读者有数据并打印预期数据。此外,当我在调试期间展开reader对象时,hasRows为true,并且字段数对于返回的列数是正确的。
这里有类似的帖子
Trouble loading SQL Data Reader data into DataTable
但答案基本上是,只是不要使用它,使用SqlDataAdapter
。我更喜欢使用它,而DataTable
有一个带有IDataReader DataTable.Load(IDataReader)
的加载方法。我只是不知道为什么读者在我将其打印到调试窗口时工作,而不是在我将其加载到DataTable
时。我只是忽略了什么?
答案 0 :(得分:3)
事实证明我只是忽略了一些东西,这实际上根本不是问题。原始代码实际上工作正常。调试时DataTable
对象的预览显示{}
并且对我来说是空的。
然后在名为ExtendedProperties
的对象上有一个属性Count = 0
,显然不是行数,但我只是掩饰了Count = 0
卡在了我脑海中。
如果您发现自己处于相同的情况,请在悬停对象时向下滚动并展开Rows
,然后您应该会看到行数。
我被骗了这个...对不起我的愚蠢,感谢大家的帮助。
答案 1 :(得分:0)
尝试这样看看它是否有效......
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter dap = new SqlDataAdapter(sqlCommand,connection);
DataTable datatable = new DataTable();
dap.Fill(datatable);
return datatable;
}
答案 2 :(得分:0)
使用SqlDataReader
或DataAdapter
,两者都有效。关闭连接后写入return语句。试试它是否有效。