使用sql从数据库中获取记录数

时间:2013-11-18 18:06:37

标签: c# sql sql-server database unit-testing

我正在创建一个测试,它会在我将一条记录插入其中后返回表中的记录数。数据库中的表最初为空,因此计数应返回1.这是我到目前为止编写的代码:

[TestMethod]
public void InsertBookIntoDb() {
    Database db = new Database();
    db.insertBooks("A", "C", "T");

    OleDbCommand countCommand = new OleDbCommand("SELECT COUNT(*) FROM Book", db.DbConnection);
    int count = countCommand.ExecuteNonQuery();

    Assert.AreEqual(1, count);
}

我的db.insertBooks()方法正常工作,因为我可以手动打开数据库并查看是否有新记录。运行此测试后,无论我插入数据库的记录数是多少,计数值始终为0。有没有更好的方法来获得记录总数?

2 个答案:

答案 0 :(得分:8)

您需要OleDbCommand.ExecuteScalar

  

使用ExecuteScalar方法检索单个值,例如,   来自数据源的聚合值。

 int count = (int) countCommand.ExecuteScalar();

答案 1 :(得分:1)

您正在使用ExecuteNonQuery,它通常用于没有结果的SQL语句(例如,UPDATE,INSERT等)。

我们通常在查询返回单个值时使用ExecuteScalar。 所以只需替换ExecuteNonQuery' with the ExecuteScalar'。它会正常工作。

    [TestMethod]
public void InsertBookIntoDb() {
    Database db = new Database();
    db.insertBooks("A", "C", "T");

    OleDbCommand countCommand = new OleDbCommand("SELECT COUNT(*) FROM Book", db.DbConnection);
    int count = (int) countCommand.ExecuteScalar();

    Assert.AreEqual(1, count);
}