gpt4 book ai didi

C# MySQLDataReader.AffectedRows = -1

转载 作者:行者123 更新时间:2023-11-29 07:36:32 25 4
gpt4 key购买 nike

在我的 MySQL 控制台中,我可以看到 select Price from rates order by id 的结果,我明白了:

mysql> select Price from rates order by id;
+-------+
| Price |
+-------+
| 100 |
| 120 |
| 150 |
| 200 |
| 350 |
| 700 |
| 500 |
| 700 |
| 800 |
| 1300 |
| 1500 |
| 7000 |
| 8000 |
| 15000 |
| 20000 |
+-------+
15 rows in set

但是当我在这个方法中将它作为 string command 运行时;

public List<string[]> ExecuteQuery(string command)
{
com = new MySqlCommand(command, con);
reader = com.ExecuteReader();
if (reader.HasRows)
{
List<string[]> records = new List<string[]>();
while (reader.Read())
{
string[] row = new string[reader.FieldCount];
for (int i = 0; i < reader.RecordsAffected; i++)
row[i] = reader[i].ToString();
records.Add(row);
}
reader.Close();
return records;
}
else
{
reader.Close();
return new List<string[]>();
}
}

reader.AffectedRows 是 -1,它打乱了整个过程......但是这个工作得很好......

MySqlCommand com = new MySqlCommand("select Access from useraccounts where Username = '" + tbxUsername.Text + "' and Pass = '" + tbxPassword.Text + '\'', d.con);
object result = com.ExecuteScalar();

我正在使用这个连接字符串:datasource = 192.168.43.191;数据库=数据库名称;用户=用户名; password = pass_word; 在运行 Apache 和 MySQL 的 Visual Studio 2015 和 XAMPP 中。这是我第一次遇到这个问题。希望你能帮上忙

最佳答案

RecordsAffected当您的查询是 INSERT/UPDATE/DELETE 查询时设置,而不是当您的查询是 SELECT 查询时设置。在您的代码中,您似乎想要使用 FieldCount属性代替

    while (reader.Read())
{
string[] row = new string[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
row[i] = reader[i].ToString();
records.Add(row);
}

您也可以将您的代码更改为这个较短的代码

public List<string[]> ExecuteQuery(string command)
{
List<string[]> records = new List<string[]>();
using(com = new MySqlCommand(command, con))
using(reader = com.ExecuteReader())
{
while (reader.Read())
{
string[] row = new string[reader.FieldCount];
for (int i = 0; i < reader.FieldCount i++)
row[i] = reader[i].ToString();
records.Add(row);
}
}
return records;
}

但是,一般来说,我建议避免使用这些全部方法,它们无法以最高效的方式处理应用程序所需的许多不同类型的查询。

例如,该方法返回一个包含字符串数组的列表,而实际上,您只返回一个列(不需要数组),并且值可能是小数,这些小数被转换为字符串并可能被转换回小数当你使用它们时。我们甚至没有开始谈论日期。您是否看到此方法如何将其问题传播到您的所有应用程序?

如果你想要一个通用的解决方案,那么选择一个好的 ORM,它抽象了数据库的使用并返回正确转换为对象实例的数据。检查 Entity FrameworkDapper (但还有许多其他存在)

关于C# MySQLDataReader.AffectedRows = -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48537470/

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