【发布时间】:2018-04-09 01:15:56
【问题描述】:
我已经创建了一个获取数据表的方法,这行代码花了一分钟多时间
da.Fill(dt)
但在 SQL Server 中,使用相同的参数,该过程将在一秒钟内执行:
protected DataTable RetrieveDataTable(string staffId, string
DtFrom, string DtTo, string Stm, string JrId,int ActiveFlag)
{
dt = new DataTable();
SqlConnection Conn = new SqlConnection(ConfigurationManager.AppSettings["Conn"]);
Conn.Open();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
try
{
cmd = new SqlCommand("Proc_QCArticleDetails", Conn);
cmd.Parameters.Add(new SqlParameter("@StaffId", staffId));
cmd.Parameters.Add(new SqlParameter("@FrmDt", DtFrom));
cmd.Parameters.Add(new SqlParameter("@ToDt", DtTo));
cmd.Parameters.Add(new SqlParameter("@ActiveFlag", ActiveFlag));
try
{
int jrid = Convert.ToInt32(JrId);
cmd.Parameters.Add(new SqlParameter("@journalId", JrId));
}
catch (Exception)
{
}
cmd.Parameters.Add(new SqlParameter("@Statement", Stm));
cmd.CommandTimeout = 250;
cmd.CommandType = CommandType.StoredProcedure;
da.SelectCommand = cmd;
da.Fill(dt); // taking a long time to run here
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
}
finally
{
cmd.Dispose();
Conn.Close();
}
return dt;
}
【问题讨论】:
-
请更新您的帖子以包含
Proc_QCArticleDetails。另请更新它以包含通常返回的记录数。 -
呸!空 catch 和 try-catch 将字符串解析为 int,使用
int.TryParse。此外,对所有实现IDisposable的东西都使用using语句,例如SqlConnection。 -
发布查询。我很确定您不要在 SSMS 中执行相同的查询,即使您认为自己会这样做。例如
dtFrom、dtoTo看起来像日期,但具有 string 类型。您确定该字符串已正确解析吗?您是否将这些字符串与日期字段或字符串字段进行比较?如果是字符串,则您有一个严重的错误并且可能返回错误的数据。传递正确键入的参数。
标签: c# sql-server ado.net