我正在创建一个测试,它会在我将一条记录插入其中后返回表中的记录数。数据库中的表最初为空,因此计数应返回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。有没有更好的方法来获得记录总数?
答案 0 :(得分:8)
使用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);
}