我正在做一个项目,我必须在mysql中通过循环更新一个表,并更新c#中的每一行。注意:我只需要更新表中一列的值。
现在,我知道这个问题以前被问过很多次,但是在花了很多时间在网上搜索之后,我还没有找到解决问题的方法。
更多说明:
因此,我已经知道了一些使这项工作发挥作用的必要条件:
我知道如何建立(工作)ssh连接。
我知道如何建立(工作)mysql连接到我的数据库。
我知道如何运行/执行 SELECT
以及 UPDATE
c#中的查询/命令。
所以我唯一需要做的就是让整个过程正常工作,就是循环本身。
现在,在我的研究中,我发现了一些建议使用 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
连接。
如果你们想知道,我已经尝试了一些关于循环的事情,但是(正如我已经提到的)这些尝试没有成功。
我对reader的尝试:
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公司
编辑:
万一你们想知道,我的table就是这个样子。这个表包含大约5600行,所以这些只是最上面的行。
4条答案
按热度按时间idfiyjo81#
您可以尝试此更改,方法是先计算行数,然后更新记录。
bwitn5fc2#
像frederiks answer一样,您现在要做的事情是在一个表上循环,并反复执行相同的查询。
即使您设法使代码正常工作,也会非常慢(因为您有大约5600行要更新)。
因此,我的建议是创建一个新表,其中包含新值(因此循环之后需要的值)。然后只运行一个update命令,用新表中的值更新旧表。
此选项可能需要几秒钟,而且会完成,因此速度要快得多!:)
您需要的查询应该如下所示:
编辑:
除了/更新我的答案之外,以下是您如何更准确地更新表格的方法:
因此,在上面的代码中,您可以更新
old_table
价值来自你的new_table
. 在本例中,您只从一列(您想要的)更新值。您可以展开查询以获得不同的结果。
insrf1ej3#
sql是基于集合的,这意味着几乎总是有比在表上循环更好的方法。你的问题也是这样。您希望避免在整个表上循环以逐个记录更新记录,因为这样做非常慢。
我并不清楚您要实现什么,因为您的代码示例在表上循环,然后在循环中,您反复执行相同的语句,但总是更新完全相同的记录?
如果要使用来自另一个表的信息更新表中的记录,可能需要查看update语句和join子句,如下所述。
wn9m85ua4#
我想不出任何理由让你想在循环中一次读一行,一次写一行,但你可以这样做。
使用一个sqlcommand进行读取,使用另一个sqlcommand进行更新。为每次更新更改循环中的参数。