gpt4 book ai didi

c# - 如何使用 Offset C# 循环读取 MySQL 数据

转载 作者:行者123 更新时间:2023-11-29 18:15:46 24 4
gpt4 key购买 nike

我尝试从 MySQL 数据库获取一些数据并尝试像这样,但它没有像我想要的那样工作。它应该每次显示 1 行,但现在 for 循环计数到顶部,然后进入 while 循环。我刚刚开始编程,我知道这可能是一个简单的解决方案,但我找不到它。

Console.WriteLine("Getting Connection ...");
MySqlConnection conn = DBUtils.GetDBConnection();

try
{
Console.WriteLine("Openning Connection ...");

conn.Open();
MySqlCommand selectdata;
selectdata = conn.CreateCommand();
int i;
for (i = 0; i < 100000; i++)
{
selectdata.CommandText = "SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7` FROM `table` LIMIT 1 OFFSET " + i;
}
MySqlDataReader rdr = selectdata.ExecuteReader();
while (rdr.Read())
{
string a = Convert.ToString(rdr["1"]);
string b = Convert.ToString(rdr["2"]);
string c = Convert.ToString(rdr["3"]);
string d = Convert.ToString(rdr["4"]);
string e = Convert.ToString(rdr["5"]);
string f = Convert.ToString(rdr["6"]);
string g = Convert.ToString(rdr["7"]);


// Print the data.
Console.WriteLine(a + " " + b + " " + c + " " + d + " " + e + " " + f + " " + g);

}
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}

Console.Read();
}

我的解决方案:

Console.WriteLine("Getting Connection ...");
MySqlConnection conn = DBUtils.GetDBConnection();

try
{
Console.WriteLine("Openning Connection ...");

conn.Open();
MySqlCommand selectdata;
selectdata = conn.CreateCommand();
selectdata.CommandText = "SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7` FROM `table` LIMIT 100000";
MySqlDataReader rdr = selectdata.ExecuteReader();
while (rdr.Read())
{
string a = Convert.ToString(rdr["1"]);
string b = Convert.ToString(rdr["2"]);
string c = Convert.ToString(rdr["3"]);
string d = Convert.ToString(rdr["4"]);
string e = Convert.ToString(rdr["5"]);
string f = Convert.ToString(rdr["6"]);
string g = Convert.ToString(rdr["7"]);


// Print the data.
Console.WriteLine(a + " " + b + " " + c + " " + d + " " + e + " " + f + " " + g);
System.Threading.Thread.Sleep(1000);

}
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}

Console.Read();
}

最佳答案

这段代码运行速度很快,尽管它运行了 100K 次。

for (i = 0; i < 100000; i++)
{
selectdata.CommandText = "SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7` FROM `table` LIMIT 1 OFFSET " + i;
}

最后,您有一个包含此文本的查询。

  SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7` FROM `table` LIMIT 1 OFFSET 99999

此查询根据表的某些不可预测的顺序从表中检索第一万行。

(要获得可预测的排序,您必须在查询中提供 ORDER BY 子句。“不可预测”就像随机,但更糟糕。随机意味着每次都有不同的排序。不可预测意味着它保持不变一样,直到它没有改变。当你最不希望它改变时。)

然后,您可以在 ExecuteReader() 方法调用中使用该查询一次。即使您的程序被设置为使用 while (rdr.Read()) 接受任意数量的行,它也只返回一行。

您的列包含名称数字。这有点奇怪。

您可能想要这样的东西。

for (i = 0; i < 100000; i++)
{
selectdata.CommandText = "SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7` FROM `table` LIMIT 1 OFFSET " + i;
MySqlDataReader rdr = selectdata.ExecuteReader();
while (rdr.Read())
{
string a = Convert.ToString(rdr["1"]);
...
Console.WriteLine(a + " " + b + " " + c + " " + d + " " + e + " " + f + " " + g);
}
}

您可以在其中使用您创建的 SQL 语句的每个版本。

但是这是一种极其低效的读取表格的方式。

为什么不这样做呢?

 selectdata.CommandText = "SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7` FROM `table` LIMIT 100000;
MySqlDataReader rdr = selectdata.ExecuteReader();
while (rdr.Read())
{
string a = Convert.ToString(rdr["1"]);
...
Console.WriteLine(a + " " + b + " " + c + " " + d + " " + e + " " + f + " " + g);
}

关于c# - 如何使用 Offset C# 循环读取 MySQL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47038940/

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