using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("SELECT * FROM mySchema.MyTable", conn);
conn.Open();
var reader = cmd.ExecuteReader();
while(reader.Read())
{...
在调试器中我可以看到我的阅读器有一行 - 我可以看到返回的数据 - 但是reader.Read
正在返回false
所以我的处理代码没有被调用。
这似乎是非常基本的“从数据库表中读取行”的东西,所以我错过了什么?我应该直接查看读者的行数据吗?
答案 0 :(得分:5)
如果让调试器显示结果,它会读出读者并枚举结果。
请参阅调试器窗口中的注释:
结果视图:展开结果视图将枚举IEnumerable
因此,您的调试器已经读出了所有结果,如果您步入reader.Read()
,则无法读取更多行,Read()
会返回false
。
我只是用一个小小的测试来复制它。当我的调试器读取结果时,我的代码无法再读取它们。如果我不让调试器显示它们,我的代码可以读取它们。 (QED)
答案 1 :(得分:-1)
您可以尝试SELECT 1;
来测试您的读者。
你有SqlManagement Studio吗?测试查询。
这是工作。
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("select 1", conn);
conn.Open();
var reader = cmd.ExecuteReader();
while(reader.Read())
{
string a = "teste";
}
}
答案 2 :(得分:-4)
将读者类型var
更改为SqlDataReader reader = command.ExecuteReader();
并尝试此操作。它会有效。
我有MYSQL
using (MYSQLCON)
{
using (MySqlDataReader sdr = sqlcmd.ExecuteReader())
using (YourWriter)
{
String Header = null;
String Content = null;
for (int i = 0; i <= sdr.FieldCount - 1; i++)
{
Header = Header + sdr.GetName(i).ToString() + ",";
}
YourWriter.WriteLine(Header);
while (sdr.Read())
for (int i = 0; i <= sdr.FieldCount - 1; i++)
{
Content = Content + sdr[i].ToString() + ",";
if (i == sdr.FieldCount - 1)
{
YourWriter.WriteLine(Content);
Content = null;
}
}
}
}