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/LINQ C# 超时无论如何

总结一下。

起初,问题更可能出在连接字符串中。当您将程序移动到另一个位置时,您的数据库服务器在新环境中不再可用。程序尝试打开连接,等待服务器响应并抛出超时异常。这样的 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;
    }