Я уже задавала вопрос "Timeout expired, optimize query" с проблемой на некоторое время, чтобы ответить сервер SQL для моего запроса:SQL Server странное поведение (запрос времени ответить)
using (SqlConnection sqlConn = new SqlConnection(SqlServerMasterConnection))
{
if (sqlConn.State != ConnectionState.Open) sqlConn.Open();
using (SqlCommand cmd = new SqlCommand("select DT.* from DetailTable DT, BillTable BT, PackageTable PT
where PT.Id= BT.IdPackage and DT.IdBill= BT.Id
and PT.CodeCompany = @codeCompany and PT.Date between @begin and @end",
sqlConn))
{
cmd.Parameters.Add(new SqlParameter(@begin , beginDate));
cmd.Parameters.Add(new SqlParameter("@end", endDate));
cmd.Parameters.Add(new SqlParameter("@codeCompany", codeCompany));
using (DbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
//work todo
}
}
}
}
это займет 28 секунд для 20000 записей,
странное поведение, что я написал эту
using (SqlConnection sqlConn = new SqlConnection(SqlServerMasterConnection))
{
if (sqlConn.State != ConnectionState.Open) sqlConn.Open();
using (SqlCommand cmd = new SqlCommand("select DT.* from DetailTable DT, BillTable BT, PackageTable PT where PT.Id= BT.IdPackage and DT.IdBill= BT.Id
and PT.CodeCompany = @codeCompany and PT.Date between '" + beginDate + "' and '" + endDate + "'"
,sqlConn))
{
cmd.Parameters.Add(new SqlParameter("@codeCompany", codeCompany));
using (DbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
//work todo
}
}
}
}
Я изменил @date
с отправленным значением без SqlParameter
и я получил результат в 0 сек !!
любое предложение для этого результата
PS:
- мы экономим дату в базе данных в качестве строки ГГГГММДДА (PT.Date является VARCHAR (8))
- BeginDate и EndDate (20130904)
Какой тип 'beginDate'? –
@BrankoDimitrijevic, begindate и enddate - это строковое значение YYYYMMDD – Akrem
на этой строке 'cmd.Parameters.Add (новый SqlParameter (@begin, beginDate));' вам не хватает кавычек вокруг @begin, это опечатка? – Tanner