复杂的报告需要 SQL 临时文件 C# Returns 无行

Complicated Report Requires SQL Temp File C# Returns No Rows

问题来了。我必须写一份很长很复杂的报告。我不认为我可以只使用 C# 来做到这一点,所以我认为最好的办法是临时 SQL table。所以我写了这段代码,但总是没有行,我知道 table.

中有数据
        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();

所以我想,也许我需要另一个 reader 到 SELECT * FROM ##TEMP 但它总是崩溃告诉我我的 reader 已经打开(我使用 reader = cmd.ExecuteReader();).请帮忙。

我找到了答案:

        cmd.Connection = connection;
        connection.Open();
        cmd.ExecuteNonQuery();
        cmd.CommandText = "SELECT * from ##temp";
        reader = cmd.ExecuteReader();

首先运行 ExecuteNonQuery,然后更改命令然后运行 ExecuteReader

您的问题无法证明使用临时 table 是合理的。您真的没有理由不直接从实际 table 中简单地读取数据(除非您的问题省略了重要和相关的细节)。

此外,最好养成使用 using 块处理数据库对象的习惯,以便即使在发生异常时也能正确清理。

代码可能如下所示:

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");
            }
        }
    }
}