为了发送电子邮件,我们会查找我们的" botmail"的一些电子邮件凭据。现在这段代码在不久前就运行得很好,但是从我们的服务器移动后,它有不断的SQL超时异常。我已经尝试更改连接字符串本身的超时,并且我尝试在OnCreated中更改CommandTimeout(在我们的DataContext类中都是ctx变量)。无论我改变什么,我都会不断得到同样的例外。我有什么东西在这里失踪吗?
代码:
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();
}
答案 0 :(得分:0)
总结一下。
首先,问题更可能出现在连接字符串中。当您在其他地方移动程序时,您的数据库服务器在新环境中不再可用。程序尝试打开连接,等待服务器响应并抛出超时异常。 这样的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;
}