复杂报表需要SQL临时文件c#返回无行

本文关键字:返回 临时文件 SQL 报表 复杂 | 更新日期: 2023-09-27 17:49:14

问题在这里。我得写一份又长又复杂的报告。我不认为我可以只使用c#,所以我认为最好的事情是一个临时的SQL表。所以我写了这段代码,我总是没有得到行,我知道表中有数据。

        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,但它总是崩溃告诉我,我的阅读器已经打开(我使用reader = cmd.ExecuteReader();)。请帮助。

复杂报表需要SQL临时文件c#返回无行

我找到了答案:

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