这两天洪哥在写一个数据库的小程序,想使用OleDbCommand.ExecuteNonQuery来执行一个SQL语句,通过这个SQL语句查出来的行数来进行相应的逻辑判断(如是否登录成功)。尴尬的是,洪哥通过OleDbCommand.ExecuteNonQuery得到的返回值一直是0,不管SQL语句是否能查到记录。
public static bool ExecuteNonQuery(string strSql, out int intCount)
{
intCount = -1;
objCommand.CommandType = System.Data.CommandType.Text;
objCommand.CommandText = strSql;
if (OpenConn())
{
objCommand.Connection = objConnection;
intCount = objCommand.ExecuteNonQuery();
return true;
}
else
{
return false;
}
}
后来上网了解一下了,原来OleDbCommand.ExecuteNonQuery返回值是对数据库的影响行数,而Select语句只是从数据库中取出记录,并没有“影响”数据库,所以返回值为0.
于是,洪哥改使用OleDbCommand.ExecuteScalar函数,代码如下:
public static bool ExecuteScalar(string strSql, out int i)
{
i = -1;
objCommand.CommandType = System.Data.CommandType.Text;
objCommand.CommandText = strSql;
if (OpenConn())
{
objCommand.Connection = objConnection;
i = (int)objCommand.ExecuteScalar();
return true;
}
else
{
return false;
}
}
相应的SQL语句也由“select * from [表名] <条件>” 改成了 “select count(1) from [表名] <条件>”,这样就没有问题。得到的返回值就是正常的匹配到的条数了。
洪哥写这篇文章,希望大家遇到相同的问题时可以少走弯路。
关于ExecuteNonQuery方法执行select返回值始终为0,本文就介绍这么多,希望对您有所帮助,谢谢!