我是使用SqlConnection类,但在执行命令时遇到了超时问题。
首先,我是使用SqlCommand属性来设置命令超时时间的,如下所示:
command.CommandTimeout = 300;
此外,我已确保将执行超时设置为0,以确保SQL管理方面不会发生超时问题。
以下是我的代码:
using (SqlConnection conn = new SqlConnection(connection))
{
conn.Open();
SqlCommand command = conn.CreateCommand();
var transaction = conn.BeginTransaction("CourseLookupTransaction");
command.Connection = conn;
command.Transaction = transaction;
command.CommandTimeout = 300;
try
{
command.CommandText = "TRUNCATE TABLE courses";
command.ExecuteNonQuery();
List<Course> courses = CourseHelper.GetAllCourses();
foreach (Course course in courses)
{
CourseHelper.InsertCourseLookupRecord(course);
}
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
Log.Error(string.Format("Unable to reload course lookup table: {0}", ex.Message));
}
}
我已经设置了日志记录,并可以证实在触发此函数后确切的30秒后,我在堆栈跟踪中收到以下错误信息:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
为了完整披露:上面的using
语句中的InsertCourseLookupRecord()
在循环中执行了另一个查询,查询的是同一数据库中的同一张表。以下是它执行的查询语句:
INSERT INTO courses(courseid, contentid, name, code, description, url, metakeywords, metadescription)
VALUES(@courseid, @contentid, @name, @code, @description, @url, @metakeywords, @metadescription)"
这个表格中有超过1400条记录。
我将认证任何帮助我解决此问题的个人为最高大法师。