gpt4 book ai didi

c# - MySqlDataReader C# 中的 HasRows 属性总是返回真值?

转载 作者:行者123 更新时间:2023-11-28 23:59:40 35 4
gpt4 key购买 nike

在我的代码中,当我使用 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();

}


}

最佳答案

您使用的工具不正确。 DataReader 应该用于迭代数据集,您希望只返回一个值(或 null)。

正确的使用方法是MySqlCommand.ExecuteScalar

try
{
var result = cmd.ExecuteScalar();

if (result != null)
{
maxID = Convert.ToInt32(result);
}
else
{
maxID = 0;
}
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}

关于c# - MySqlDataReader C# 中的 HasRows 属性总是返回真值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348966/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com