复杂的报表需要SQL临时文件C#返回无行
问题描述:
这是问题所在。我不得不写一份长长的复杂的报告。我不认为我可以只使用C#,所以我认为最好的东西是一个临时SQL表。所以我写了这段代码,我总是没有行,我知道表中有数据。复杂的报表需要SQL临时文件C#返回无行
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = "SELECT * INTO ##temp FROM Customers";
cmd.Connection = connection;
connection.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows)
{ MessageBox.Show("ROWS"); }
else
{ MessageBox.Show("NO ROWS"); }
connection.Close();
所以我想,也许我需要另一个读者SELECT * FROM ## TEMP但它总是崩溃告诉我,我的读者已经打开(我用读卡器= cmd.ExecuteReader();)。请帮忙。
答
我找到了答案:
cmd.Connection = connection;
connection.Open();
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT * from ##temp";
reader = cmd.ExecuteReader();
首先运行的ExecuteNonQuery,然后更改命令然后运行的ExecuteReader
答
你的问题未能证明使用临时表。真的没有理由不直接从实际的表中读取数据(除非您的问题省略了重要的相关细节)。
此外,最好还是习惯于使用using
块来处理db对象,即使在发生异常时也能正确清理。
这里是代码可能是什么样子:
using (var connection = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("SELECT * FROM Customers", connection))
{
connection.Open();
using (var reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
MessageBox.Show("ROWS");
}
else
{
MessageBox.Show("NO ROWS");
}
}
}
}
+0
这真的很有趣,你认为我不应该使用临时表。以下是报告的范围:它将被复制到包含约10个工作表的工作簿中 - 每个工作表包含约1000行和约30列。我认为这是太多的数据,以保留在记忆中,但我没有经历过,所以我非常喜欢你的意见,不管它是否为什么。 – Missy
是什么“撞车”呢?如果你没有行,那么没有结果集行。因为你选择*到一个临时表,我不知道为什么结果行甚至会被期望。显然不是在选择*到临时表时发出结果集的行为,这可以通过在SSMS中运行查询来证明。 – user2864740
好的 - 你说得对。当我开始发布帖子时它崩溃了,但我修复了它。我把标题改为这个问题。你认为你可以帮助解决我的问题吗?如何从临时文件获取行? – Missy
我回滚了你的编辑。如果您发现您认为会使未来读者受益的解决方案,请使用标题*您的答案*下方的空格并放在那里。 [完全可以接受](http://*.com/help/self-answer)。 –