gpt4 book ai didi

C#循环插入重复记录

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

所以我正在进行概念验证冒险,我想做的是循环遍历 html 并找到所有链接并使用 C# 将链接保存在 mysql 中。查找链接部分工作正常,但是当我将链接保存在表中时,它们会被增量复制。下面的例子

表中的记录:1:11:21:21:31:31:31:41:41:41:4等等...

页面表:

    | page_id | page_url        | date_added |
------------------------------------------
| 1 | "http://bla.com | |

链接表:

    | link_id | link_page_id | date_added |
---------------------------------------

获取链接的代码:

    private static void getLinks(string contents, string url)
{
HtmlDocument html = new HtmlDocument();
html.LoadHtml(contents);

HtmlNodeCollection links = html.DocumentNode.SelectNodes("//a[@href]");

foreach(HtmlNode link in links)
{
foreach(HtmlAttribute attr in link.Attributes)
{
if(attr.Name == "href")
{
saveLinks(url, attr.Value);
}
}
}

}

保存链接的代码:

    private static void saveLinks(string url, string link)
{
try
{
Console.WriteLine(url + " - " + link);
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"INSERT INTO
sites.links(
links_page_id,
link
)
SELECT
p.page_id,
@link
FROM
sites.links l
RIGHT JOIN
sites.pages p
ON p.page_url = @url";
cmd.Prepare();

cmd.Parameters.AddWithValue("@url", url);
cmd.Parameters.AddWithValue("@link", link);
cmd.ExecuteNonQuery();
}

catch (MySqlException e)
{
Console.WriteLine("Failure: " + e.Message);
}
}

在我的控制台输出中,我得到了预期数量的链接,没有重复,并且我已经在 mysql 中测试了查询,一切似乎都很好。我可能忽略了一些愚蠢的事情,但我似乎找不到我做错了什么。所以任何帮助都会很棒。

最佳答案

如果您需要通过网址获取page_id,则无需使用sites.links加入

          cmd.CommandText = @"INSERT INTO 
sites.links(
links_page_id,
link
)
SELECT
p.page_id,
@link
FROM
sites.pages p
WHERE p.page_url = @url";

关于C#循环插入重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581196/

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