我目前正在研究一個C#項目,並試圖從MySQL數據讀取器返回的行數。檢查從MySQL數據讀取器返回的行數
我知道沒有直接的功能,所以我試圖寫我自己的。在函數中,我將它傳遞給MySQLDataReader對象,然後循環訪問MySQL Data Reader並遞增計數器並返回計數器的值。
然後這似乎鎖定了程序,我猜是因爲我是Reader.read()之後,我已經計數了我已經在最後。相反,我已經嘗試創建閱讀器的副本,然後循環通過臨時版本,但我得到了相同的結果。
下面是我的代碼,我正在執行查詢並調用函數。
string query = "SELECT * FROM reports, software, platforms, versions "
+ "WHERE [email protected] AND reports.SoftwareID=software.id AND reports.PlatformID=platforms.id "
+ "AND reports.VersionID=versions.id AND [email protected]";
using (MySqlCommand cmd = new MySqlCommand(query, db.conn))
{
cmd.Parameters.AddWithValue("@verified", "1");
cmd.Parameters.AddWithValue("@notificationSent", "0");
using (MySqlDataReader reader = cmd.ExecuteReader())
{
totalEmails = HelperClass.totalRowsInMySQLDataReader(reader);
while (reader.Read())
{
currentEmailCount++;
EmailNotifications emailNotification = new EmailNotifications(reader);
emailNotification.sendNewBugReportAfterVerificationEmail(currentEmailCount, totalEmails);
}
}
下面是我的函數獲得的行數
public static int totalRowsInMySQLDataReader(MySqlDataReader reader)
{
MySqlDataReader tempReader = reader;
ILibraryInterface library = GeneralTasks.returnBitsLibrary(Configuration.databaseSettings, Configuration.engineConfig.logFile);
string methodInfo = classDetails + MethodInfo.GetCurrentMethod().Name;
try
{
int count = 0;
while (tempReader.Read())
{
count++;
}
tempReader = null;
return count;
}
catch (Exception ex)
{
string error = string.Format("Failed to get total rows in MySQL Database. Exception: {0}", ex.Message);
library.logging(methodInfo, error);
library.setAlarm(error, CommonTasks.AlarmStatus.Medium, methodInfo);
return -1;
}
}
感謝您的幫助,您可以提供
感謝您的幫助。很好的解決方案 – Boardy
這不適用於*;你必須指定列。即使如此,彼得的下面的觀點是正確的 - 這將只返回一行。 - 編輯:或將*放在計數(*)之前。 –
儘管聽起來很愚蠢,但這並不能回答這個問題。 – cybermonkey