0

查询成功时 SQL Server Express 是否返回代码?以及如何在 C# 中捕获这一点?

谢谢

我有一个下一个按钮,它允许我从表中获取接下来的 10 行。我想根据上一个查询是否成功来建立这个继续按钮。

4

2 回答 2

0

在不知道如何生成查询的情况下,很难确切地告诉您如何执行此操作,但如果您使用的是 SQLDataReader,则可以检查其 HasRows 属性,或者如果您使用的是 DataTable,则可以检查其 Rows.Count 属性。

于 2013-04-26T01:50:32.687 回答
0

值得注意的是,如果查询失败,您将收到异常,因此不会返回任何内容,除非您当然捕获了异常,否则您可以让它返回您喜欢的任何内容!

我想也许你正在考虑ExecuteNonQuery哪个 forINSERT/UPDATE/DELETE命令将返回受影响的行数(受命令中的所有语句),或者如果事务回滚则返回 -1。它不会返回受 select 语句影响的行数,但这应该不是问题,因为没有理由使用ExecuteNonQueryforSELECT语句。

如果您只想返回 COUNT 个结果,您可以将COUNT查询与ExecuteScalar结合使用。

如果您使用的是SqlDataReader,您可以使用HasRows属性作为布尔值是否返回行,或者在使用阅读器时,您可以使用计数器返回确切的行数,例如:

int rowcount = 0;
bool success = false;
using (var connection = new SqlConnection("connectionString"))
using (var command = new SqlCommand("SELECT TOP 10 * FROM Table"))
{
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        success = reader.HasRows;
        while (reader.Read())
        {
            rowcount++;
            // DO SOMETHING WITH YOUR DATA
        }
    }
}

或者,如果您使用的是 SqlDataAdapter,您可以使用DataTable中的行数来获取成功的布尔值或受影响的行数。

using (var adapter = new SqlDataAdapter("SELECT TOP 10 * FROM Table", "connectionString"))
{
    DataTable table = new DataTable();
    adapter.Fill(table);

    bool success = table.Rows.Count > 0;
    int rows = table.Rows.Count;

}
于 2013-04-26T09:15:22.470 回答