SQL/LINQ C# 超时无论如何
本文关键字:超时 无论如何 LINQ SQL | 更新日期: 2023-09-27 18:35:27
为了发送电子邮件,我们为"botmail"查找了一些电子邮件凭据。不久前,这段代码运行良好,但是将其从我们的服务器中移出后,它有不断的SQL超时异常。我已经尝试更改连接字符串本身的超时,并且尝试在OnCreated中更改CommandTimeout(两者都在ctx变量的DataContext类中)。无论我改变什么,我总是得到同样的例外。我在这里缺少什么吗?
法典:
if (Enumerable.Any(from c in ctx.Default_Email_Creds select c))
{
serverHostname = (from c in ctx.Default_Email_Creds select c.Hostname).First();
serverUsername = (from c in ctx.Default_Email_Creds select c.UserName).First();
serverPassword = (from c in ctx.Default_Email_Creds select c.Password).First();
mailFrom = (from c in ctx.Default_Email_Creds select c.Mail_From).First();
}
总结一下。
起初,问题更可能出在连接字符串中。当您将程序移动到另一个位置时,您的数据库服务器在新环境中不再可用。程序尝试打开连接,等待服务器响应并抛出超时异常。这样的 SQL 查询不太可能长时间进行,因为它是在表中搜索第一行。即使表有很多行,查询也会快速返回第一行。仅当查询不是表时Default_Email_Creds才能长时间执行查询。如果视图是具有复杂筛选器Default_Email_Creds则可能会发生这种情况。
其次,您的代码效率非常低,并且对服务器执行了五个SQL查询。我建议这样做:
var res = (from c in ctx.Default_Email_Creds select new {c.Hostname, c.UserName, c.Password, c.Mail_From}).FirstOrDefault();
if(res != null)
{
serverHostname = res.Hostname;
serverUsername = res.UserName;
serverPassword = res.Password;
mailFrom = res.Mail_From;
}