- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将我的代码剥离到我能得到的最基本的部分,但仍然会导致问题。
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()。
我没有指定任何像多线程和异步东西之类的东西,所以我有点困惑为什么会这样。我愿意……
编辑:我发现这可能与它是一个 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/
我正在尝试使用范围输入元素构建一个 slider ,该元素在单击、滚动或长按(连续按下)时移动 1 步。我有点击和滚动所需的逻辑,但是相同的逻辑似乎不适用于鼠标按下事件(长按/连续按下)。 到目前为止
我正在编写一个跟踪其他程序执行情况的程序。我正在使用动态指令检测来跟踪 x86 的 CMP 指令的行为。 我正在使用 Windows 调试 API 来控制被调试程序的行为。我使用“仅调试此进程”标志启
我有以下代码片段。 我有点困惑,首先,为什么我的步骤参数是2,是不是因为我从字典之外跳转,所以我最终得到了总人口? 第二:i+1 到底是做什么的?以前没见过吗?如果我从 i (国家名称)跳到总人口上,
如果我同时拥有公钥和私钥,如何使用 everyauth 通过 node.js 执行非常简单的 oauth 身份验证?与多步骤 facebook 类型的身份验证不同,我只想使用 everyauth 进行
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!