在我的代码中,当我使用 Visual Studio C# 进行调试时,我注意到虽然查询中没有行:
select MAX(idSalesJournal) as maxId from accountingsystemdb.salesjournal"
dr.HasRows 属性始终返回 TRUE。当我继续调试时,我注意到循环将在退出循环之前运行 1 次。现在我有一个大问题,因为虽然数据集中没有数据,但循环将如何运行 1 次。然后我打印了我在消息框中得到的值,它什么也没显示(空白)。这怎么可能发生,我怎样才能避免这件事?我将把我在 mySql 工作台中执行的相同查询的图像放入成功执行并且在结果中没有显示任何行的图像。它在 MySql 中显示 0 行。在 C# 中执行的相同查询将返回 Hasrows 属性为 True。我把我的完整代码放在下面。
public void salesJournal(string addOrRemove, string lorryNo, string invoiceNo, DateTime billDate, string source, DateTime paybackDate, string itemCode, double itemcost, string desc, double qty, double discount, double amount, string debtor)
{
if (conn.State.ToString() == "Open")
{
conn.Close();
conn.Open();
}
int maxID = 0;
if (conn.State.ToString() == "Closed")
{
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
//---------------------- Selecting Max ID ------------------------------------------
cmd.CommandText = "select MAX(idSalesJournal) as maxId from accountingsystemdb.salesjournal";
try
{
MySqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows && dr != null)
{
while (dr.Read())
{
maxID = Convert.ToInt32(dr["maxId"].ToString());
}
}
else
{
maxID = 0;
}
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}
conn.Close();
//---------------------------------------------------------------------------------
if (conn.State.ToString() == "Open")
{
conn.Close();
conn.Open();
}
else
{
conn.Open();
}
try
{
cmd.CommandText = "insert into accountingsystemdb.salesjournal VALUES('" + maxID + 1 + "', STR_TO_DATE('" + billDate + "', '%m/%d/%Y %h:%i:%s %p'), '" + invoiceNo + "', '" + lorryNo + "', '" + source + "', '" + itemCode + "', '" + desc + "', '" + qty + "', '" + itemcost + "', '" + amount + "', '" + discount + "', '" + addOrRemove + "', STR_TO_DATE('" + paybackDate + "', '%m/%d/%Y %h:%i:%s %p'), '" + debtor + "', '" + Program.username + "')";
cmd.ExecuteNonQuery();
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}
conn.Close();
}
}