【发布时间】:2018-05-17 12:38:19
【问题描述】:
我正在做一个项目,我必须通过循环更新 MySql 中的表并更新 C# 中的每一行(一个接一个)。 注意:我必须更新表中只有一列的值。
现在,我知道这个问题已经被问过(很多次),但是在花了很多时间在互联网上搜索之后,我还没有找到解决我问题的方法。
更多解释:
所以我已经知道了完成这项工作所必需的一些事情:
- 我知道如何建立(有效的)SSH 连接。
- 我知道如何建立与我的数据库的(有效的)MySql 连接。
- 我知道如何在 C# 中运行/执行
SELECT和UPDATE查询/命令。
所以我唯一需要做的就是让整个事情工作起来,就是循环本身。
现在,在我的研究过程中,我遇到了一些建议使用 Reader 的答案。我不知道这是否是我需要的以及(如果是)如何正确使用它。
以下是我目前拥有的代码(用于建立连接和执行查询)。
我的代码:
class ReaderDemo1
{
public static void Update()
{
Console.WriteLine("[Core] Opening Connection To Database...");
Database.openStockConn(Settings.databaseName, Settings.databaseUsername, Settings.databasePassword, Settings.sshHost, Settings.sshUsername, Settings.sshPassword);
if (Database.stockConn.State != ConnectionState.Open)
{
Database.openStockConn(Settings.databaseName, Settings.databaseUsername, Settings.databasePassword, Settings.sshHost, Settings.sshUsername, Settings.sshPassword);
}
Console.WriteLine("[Core] database connection is now open!\n");
MySqlCommand cmd = new MySqlCommand("SELECT value FROM catalog_product_entity_decimal", Database.stockConn);
try
{
Console.WriteLine("[Price] Updating Prices...");
MySqlCommand command = new MySqlCommand("UPDATE catalog_product_entity_decimal SET value= 1112 WHERE value_id= 4063", Database.stockConn);
command.ExecuteNonQuery();
Console.WriteLine("[Price] Prices Have Been Updated!");
}
catch
{
Console.WriteLine("Updating Failed!");
}
finally
{
if (Database.stockConn != null)
{
Database.stockConn.Close();
}
}
}
}
只是为了提供一些额外的上下文:
-
Database.cs是我创建连接的地方(SSH和MySql) -
Settings.cs是我拥有SSH和MySql连接的所有登录数据的地方。
如果你们想知道,我自己已经尝试了一些关于循环的事情,但是(正如我已经提到的)这些尝试没有成功。
我对阅读器的尝试:
using (var reader = command.ExecuteReader())
{
var indexOfValue = reader.GetOrdinal("value");
while (reader.Read())
{
var price1 = reader.GetValue(indexOfValue);
Console.WriteLine("Executing Update Command...");
MySqlCommand cmd = new MySqlCommand("UPDATE catalog_product_entity_decimal SET value= 1222 WHERE entity_id= 759 AND entity_id= 839 AND entity_id= 881", con);
cmd.ExecuteNonQuery();
Console.WriteLine("Update Command Executed!");
}
}
如前所述,上面的代码并没有按照我希望的方式工作(可能是因为它现在实际上没有做任何事情)。只是想让你们知道,我没有陷入错误。我只是被困在如何做到这一点。
我希望你们中的某个人可以帮助我或指出正确的方向,如果您认为我的问题与另一个问题重复,请告诉我,我会调查它! :) 提前致谢。
亲切的问候,
LKS
编辑:
如果你们想知道,this 就是我的桌子的样子。 该表包含大约 5600 行,因此这些只是最上面的行。
【问题讨论】:
-
如果你想得到帮助,至少告诉我们错误信息是什么。
-
@Steve 我没有收到错误,我只是不知道如何循环遍历我的表。有或没有
Reader。 -
@Steve 所以我不是要你们解决我收到的错误消息,而是要问你们如何循环遍历我的表格。 :)
-
你的意思是这样循环? stackoverflow.com/a/1774515/9055793
-
您认为解决方案是一个循环。但是什么会更好呢?提交 3 个(或 3000 个)更新声明?或者改为运行
UPDATE catalog_product_entity_decimal SET value= 1222 WHERE entity_id IN (759 , 839 , 881)?