gpt4 book ai didi

c# - 通过 foreach 为每个循环创建数据库连接会导致单步执行代码跳来跳去

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:20 25 4
gpt4 key购买 nike

我正在将我的代码剥离到我能得到的最基本的部分,但仍然会导致问题。

public void SomeMethod()
{
CompanyList allCompanies = GetAllCompanies();

foreach (Company x in allCompanies)
{
List<string> warnings = x.GenerateWarnings();
}
}

public class Company
{
public string CompanyCode { get; set; }

public List<string> GenerateWarnings()
{
List<string> warnings = new List<string>();

using (OleDbConnection conn = new OleDbConnection(connstring)) //ms access database
{
conn.Open();

//do lots of stuff here, but commented out, still causes a problem
//basically making some database calls to confirm that an expected
//value is actually in the table. List<string> warnings is then
//populated based on the results of these calls.

conn.Close();
}
return warnings;
}
}

所以发生的事情是,假设第一个循环遍历 allCompanies 的是 CompanyCode 为 0001 的 Company。当我单步执行代码时,我到达了 Company 的 GenerateWarnings() 代码,正如预期的那样。但是,当我到达 conn.Open() 时,我的下一步是为 CompanyCode 0002 到达 GenerateWarnings() 的公司。然后我的下一步再次是 CompanyCode 0001,到达 conn.Close()。这种在 Company 实例之间跳来跳去的情况会持续到 allCompanies 的整个 foreach 循环。这不是一个一致的模式,有时它会跳来跳去,就像一家公司可能会打开、关闭,然后继续代码的其余部分,然后随机地我的下一步将是某些公司的 conn.Close()就像 20 步之前那样运行了 conn.Open()。

我没有指定任何像多线程和异步东西之类的东西,所以我有点困惑为什么会这样。我愿意……

  • A) 了解发生这种情况的原因
  • B) 知道如何阻止它跳来跳去

编辑:我发现这可能与它是一个 MS Access 数据库这一事实有关。当我运行该页面时,快速打开 Access 文件时创建的 .ldb 不断出现和消失。

编辑 2:这对我来说真的很奇怪。我在整个过程中插入了一些快速的单行代码,以将 forloop 的进度记录到带有时间戳的文本文件中,这样我就可以准确地看到发生了什么,当我这样做时,文本会按顺序记录每一行,没有跳来跳去。是否将日志添加到文本函数调用中,例如无意中限制了它或其他什么?这有效地解决了我的问题,但我现在比开始时更加困惑。

最佳答案

为什么不直接将使用/打开/关闭代码移至 SomeMethod 并将 conn obj 传递给 GenerateWarnings?

它应该运行得更快,而不必为每个项目打开/关闭。

SomeMethod()
{
Using(...)
{
Conn.open...
Foreach (Company...)
{
...GenerateWarnings(conn)..
}
Conn.close...
}
}

GenerateWarnings(conn)
{
...use conn to make db calls...
}

(或者重构对您的体系结构有意义以实现相同的结果)

关于c# - 通过 foreach 为每个循环创建数据库连接会导致单步执行代码跳来跳去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871698/

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